简体   繁体   中英

server doesn't respond on POST Request with CURL + PHP

I have a simple PHP Script, that uses CURL to send a HTTP Post Request to a remote server.

$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;

This results in an error: "no response from server". The request can't be found in the access log of the remote server, too!

What's more, if I send the postfields as a querystring, ie:

curl_setopt($ch, CURLOPT_POSTFIELDS, '&a=b');

then everything is just fine.

It seems like something is wrong with the Apache or PHP configuration on the remote server. Any hints?

Edit:

As for now, it looks like the Server doesn't accept (or correctly handle) requests with Content-Type: multipart/form-data (CURL uses that type when setting an array as the postfields, but not when setting a string.)

Since I need to send a file with the request, i have to use the multipart/form-data. So how do I get the server to correctly handle this?

如果将数组传递给CURLOPT_POSTFIELDS则表单将以multipart/form-data的形式提交。您的远端可能不接受这种编码类型。

Best way to do POST request is to format postFields like this.

VARIABLE = VALUE separated by & .

TIP:

$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;

Would be Pleased to do any more help.

Check if the HTTP header contains "Expect:100-continue" field. Some Servers do not deal with this field and just wait. You can try:

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

For more information, pls see: curl http 100 continue and multipartform-data post

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM