gpt4 book ai didi

php - 使用 Guzzle 将文件发布到 Web 服务

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:46 31 4
gpt4 key购买 nike

我已经尝试了几个小时来发出发送文件的 POST 请求。

首先尝试了一个带有流上下文的简单file_get_contents(),似乎不起作用。当不同 URL 上的 GET 有效时,我从未收到回复。

我在网上搜索 HTTP 客户端,发现 Guzzle 在 Packagist 上被下载了 40 万次;我决定尝试这项技术。有据可查,但是,唉,在发布该死的文件时也会出错。

$request = $client
->post('/files/')
->addPostFields(array('comments' => 'no value'))
->addPostFile('file', 'test.doc')
->setAuth($this->username, $this->password);

我花了几个小时阅读和搜索网络,才发现我遇到了“417 Expectation Failed”问题。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>417 Expectation Failed</title>
</head><body>
<h1>Expectation Failed</h1>
<p>The expectation given in the Expect request-header
field could not be met by this server.
The client sent<pre>
Expect: 100-Continue, 100-Continue
</pre>
</p><p>Only the 100-continue expectation is supported.</p>
</body></html>

在网络上进行更多搜索后,我最终阅读了 Guzzle 自动发送的“Expect: 100-continue” header ,因此我尝试了:

$request->removeHeader('expect');

我现在得到一个错误的请求:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
zzle/3.7.3 curl/7.15.5 PHP/5.3.27</pre>
</p>
</body></html>

打印请求 header 以发现:丢失,我得到:

var_dump($request->__toString());

POST /files/ HTTP/1.1
Host: nunc57.qc.bell.ca
User-Agent: Guzzle/3.7.3 curl/7.15.5 PHP/5.3.27
Content-Type: multipart/form-data
Authorization: Basic bm92YTpzeW5hcHNl

现在我真的很困惑,我希望有人已经找到了解决这个问题的方法。我真的厌倦了这一切:(

最佳答案

我想知道 POST 到 /files/(带有尾部斜杠)是否会导致问题。也许这会强制内部重定向并扰乱 Goutte,而不是网络浏览器?我会尝试调整您的页面,以便您发布到 /files/files/something

如果您可以使用 Web 浏览器 POST 到目标 URL,我还建议您使用浏览器工具记录请求 header ,并查看是否有任何 header 可以添加到您的 Guzzle 请求中。

关于php - 使用 Guzzle 将文件发布到 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18773709/

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