【问题标题】:PHP curl not sending post paramsPHP curl不发送帖子参数
【发布时间】:2015-08-13 09:29:45
【问题描述】:

我有一个在线表单,可以将数据作为 http 帖子提交。 如果没有数据作为 post 发送,它将返回以下错误消息

很抱歉,您提交的表单无效或已不存在。

我正在使用以下代码使用 curl 发送 http post 数据。但我总是收到错误消息作为输出。 如何解决这个问题。我错过了什么吗?我打印了 curl 请求,但没有发送 post 参数。我该如何解决这个问题? 我的代码如下所示

function curlUsingPost($url, $data)
{
  $content_type = 'application/x-www-form-urlencoded';

    if(empty($url) OR empty($data))
    {
        return 'Error: invalid Url or Data';
    }

    
    //url-ify the data for the POST
    $fields_string = '';
    foreach($data as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    $fields_string = http_build_query($data).'\n';
    echo $fields_string;


    //open connection
    $ch = curl_init();

    //set the url, number of POST vars, POST data
 //   curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: ' . $content_type]);
 
 curl_setopt($ch, CURLOPT_HTTPHEADER,array($content_type));
    curl_setopt($ch,CURLOPT_URL,$url);
    
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt( $curl_handle, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10); # timeout after 10 seconds, you can increase it
   //curl_setopt($ch,CURLOPT_HEADER,false);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);  # Set curl to return the data instead of printing it to the browser.
   curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); # Some server may refuse your request if you dont pass user agent

   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
   
   
   $info = curl_getinfo($ch);
    
   print_r($info );
    //execute post
    $result = curl_exec($ch);



    //close connection
    curl_close($ch);
    return $result;
}


$url = 'office.promptip.com:8443/his1.max/Services/Webform.aspx?request=submitwebform&token=202D36560E444E466658461615120F75411B09634C696C6F79454E795E7C7A5154505645414F456C584C17101B443D431D0B654D66686D7C454E795E2D7E5152565341404145625E4213141E4273421E5E66486B666F2A464B7A5B79785F54520645444F15635C454516134422421A0D664A3D68687C454E79587F7D5F52575714424043635E1611181D16704D1D0E654F69696F2A474A7A0A78785807525E45414E406350424016134422421A0D374C6F686C7C44482F59787D5E530150104218426D584316181A4177411B0F';
//echo $url;
$data = [
'C0IFirstName' => 'John Doe',
'C1ILastName' => 'Doe John',
'C2IPosition' =>'Father-Guardian',
'U3I80'=>'8129020464',
'U4I150'=>'johndoe@johndoe.com',
'U5I79'=>'This is the message buddy',
'U6I102' => 'Ann',
'U7I105' =>'Doe',
'U8I52' =>'FS1',
'C9IClientId'=> rand ( 0,100000 ),
'U10I21'=>'Website-Enquiry Form'

];

echo curlUsingPost($url,$data);

【问题讨论】:

  • curl_setopt( $curl_handle, CURLOPT_HTTPHEADER, array( 'Expect:' ) ); 错误 - 在这种情况下句柄应该是 $ch
  • 是的,我删除了 Expect: 。仍然无法正常工作。(由于在线链接的建议而添加了期望)
  • 您可以使用 implode 函数来连接 postfields 而不是将 '&' 放在末尾,因为这最终会以额外的 '&' 结束。
  • 可以增加超时时间。
  • 我无法在给定的 url 上看到您尝试提交的特定表单 - 它是否超出了登录页面?

标签: php curl http-post


【解决方案1】:

解决方案

将此添加到您的 curl 请求中:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

并在您请求的 URL 中将 & 替换为 &

$url = 'office.promptip.com:8443/his1.max/Services/Webform.aspx?request=submitwebform&token=202D36560E444E466658461615120F75411B09634C696C6F79454E795E7C7A5154505645414F456C584C17101B443D431D0B654D66686D7C454E795E2D7E5152565341404145625E4213141E4273421E5E66486B666F2A464B7A5B79785F54520645444F15635C454516134422421A0D664A3D68687C454E79587F7D5F52575714424043635E1611181D16704D1D0E654F69696F2A474A7A0A78785807525E45414E406350424016134422421A0D374C6F686C7C44482F59787D5E530150104218426D584316181A4177411B0F';

解释

首先,您请求的 URL 错误,可能是从某些 HTML 文档中复制而来的。通常,& 实体会被 HTML 解释器替换为 & 字符,但这不适用于 curl,您必须手动替换实体。

服务器也返回

很抱歉,您提交的表单无效或没有 不再存在。

对于响应正文中的每个请求的每一端。但是对于成功的请求,它还提供了一个 Location 标头。通常浏览器会跟随这个位置​​,发出第二个请求并显示成功消息。你必须告诉 cURL 对 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) 做同样的事情。

【讨论】:

  • 嗨,pamelus。谢谢您的回复。让我试试这个。实际上我正在旅行。这就是为什么我无法立即回复
  • 嗨 Pamelus。还有一个问题..它在我的本地 mamp 中工作。但在服务器上,它什么也没返回
  • curl_error($ch) 说什么?记得把curl_error放在curl_exec之后。
  • 它说无法连接
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多