服务器不响应CURL + PHP的POST请求

时间:2013-07-18 07:41:11

标签: php apache http curl

我有一个简单的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。那么如何让服务器正确处理呢?

3 个答案:

答案 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