加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何使用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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读