我有一个简单的PHP脚本,它使用CURL将HTTP Post请求发送到远程服务器。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://91.250.77.10/test.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('a' => 'b'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error)
echo $error;
else
echo $contents;
这会导致错误:“服务器无响应”。在远程服务器的访问日志中也找不到请求!
更重要的是,如果我将postfields作为查询字符串发送,即:
curl_setopt($ch, CURLOPT_POSTFIELDS, '&a=b');
然后一切都很好。
远程服务器上的Apache或PHP配置似乎有问题。任何提示?
修改
就目前而言,看起来服务器不接受(或正确处理)具有Content-Type的请求:multipart / form-data (CURL在将数组设置为postfields时使用该类型,但在设置字符串时不使用。)
由于我需要发送带有请求的文件,我必须使用multipart / form-data。那么如何让服务器正确处理呢?
答案 0 :(得分:0)
如果您将数组传递给CURLOPT_POSTFIELDS
,则表单将以multipart/form-data
的形式提交。您的远程端可能无法接受此编码类型。
答案 1 :(得分:0)
执行POST
请求的最佳方法是格式化postFields。
VARIABLE = VALUE
以&
分隔。
提示强>
$postFields = 'var1=cons1&var2=cons2&var3=cons3&var4=cons4&var5=cons5';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://91.250.77.10/test.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error)
echo $error;
else
echo $contents;
很高兴能够提供更多帮助。
答案 2 :(得分:0)
检查HTTP标头是否包含“Expect:100-continue”字段。有些服务器不处理这个领域而只是等待。 你可以尝试:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: '));
有关详细信息,请参阅: curl http 100 continue and multipartform-data post