如何使用curl来生成POST巨大的XML文件 – PHP
发布时间:2020-12-14 02:09:39 所属栏目:Linux 来源:网络整理
导读:有办法吗? curl -X POST -H "Content-Type:application/xml" --data @myfile.xml http://example.com 但直接在PHP? CURLOPT_PUT / CURLOPT_UPLOAD以及file_get_contents以及exec 不是解决方案,因为它必须是POST,文件很大,所以必须流式传输. 有任何想法吗?
有办法吗?
curl -X POST -H "Content-Type:application/xml" --data @myfile.xml http://example.com 但直接在PHP? CURLOPT_PUT / CURLOPT_UPLOAD以及file_get_contents以及exec 不是解决方案,因为它必须是POST,文件很大,所以必须流式传输. 有任何想法吗? 解决方法
我有一个类似的问题,尝试将大量的摄取文件从PHP提供给elasticsearch的批量API,直到我意识到批量API端点接受了PUT请求.
无论如何,这段代码使用大文件执行POST请求: $curl = curl_init(); curl_setopt( $curl,CURLOPT_PUT,1 ); curl_setopt( $curl,CURLOPT_INFILESIZE,filesize($tmpFile) ); curl_setopt( $curl,CURLOPT_INFILE,($in=fopen($tmpFile,'r')) ); curl_setopt( $curl,CURLOPT_CUSTOMREQUEST,'POST' ); curl_setopt( $curl,CURLOPT_HTTPHEADER,[ 'Content-Type: application/json' ] ); curl_setopt( $curl,CURLOPT_URL,$url ); curl_setopt( $curl,CURLOPT_RETURNTRANSFER,1 ); $result = curl_exec($curl); curl_close($curl); fclose($in); 这里,$tmpFile是包含请求主体的文件的完整路径. 注意:即使设置了CURLOPT_PUT,重要的部分是将CURLOPT_CUSTOMREQUEST设置为’POST’. 您必须将Content-Type:标头调整为服务器所期望的任何内容. 使用tcpdump,我可以确认请求方法是POST: POST /my_index/_bulk HTTP/1.1 Host: 127.0.0.1:9200 Accept: */* Content-Type: application/json Content-Length: 167401 Expect: 100-continue [...snip...] 我在Ubuntu 14.04上使用包libcurl3(版本7.35.0-1ubuntu2.5)和php5-curl(版本5.5.9 dfsg-1ubuntu4.11). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |