0

我有一个简单的 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 在将数组设置为后字段时使用该类型,但在设置字符串时不使用该类型。)

由于我需要发送带有请求的文件,因此我必须使用 multipart/form-data。那么如何让服务器正确处理这个问题呢?

4

3 回答 3

0

检查 HTTP 标头是否包含“Expect:100-continue”字段。有些服务器不处理这个字段,只是等待。你可以试试:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: '));

有关更多信息,请参阅: curl http 100 continue 和 multipartform-data post

于 2013-07-18T09:01:37.427 回答
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;

很乐意提供更多帮助。

于 2013-07-18T08:54:14.827 回答
0

如果您将数组传递给CURLOPT_POSTFIELDS然后提交表单,因为multipart/form-data您的远程端可能不接受此编码类型。

于 2013-07-18T07:46:26.983 回答