gpt4 book ai didi

php - 如何使用 curl 对巨大的 XML 文件进行 RAW POST - PHP

转载 作者:可可西里 更新时间:2023-11-01 13:39:06 26 4
gpt4 key购买 nike

有什么办法吗

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_CUSTOMREQUEST 设置为 'POST',即使设置了 CURLOPT_PUT

您必须调整 Content-Type: header 以适应服务器的任何期望。

使用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)。

关于php - 如何使用 curl 对巨大的 XML 文件进行 RAW POST - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com