【问题标题】:cURL Post Data Not SendingcURL 发布数据未发送
【发布时间】:2014-06-16 10:52:25
【问题描述】:

我正在尝试通过 cURL 发送 POST 数据,但它没有发送数据,但是当我将它们作为它发送的 GET 变量发送时,有人知道问题可能是什么吗?

curl_setopt_array($ch, array( 
    CURLOPT_URL => "local.new.api.test.com/authenticate/"
)); 

$data = array(
    'username'  =>  'test',
    'password'          =>  'test'
);  

$data_string = json_encode($data);  

curl_setopt($ch, CURLOPT_POST, TRUE);                                                                   
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);   
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    

【问题讨论】:

  • 是完整的代码吗?请求的 URL 在哪里?
  • @hindmost 嗨,我没有发布它,因为我使用的是本地虚拟主机,我已经编辑了原始帖子
  • 刚刚想通了。我的虚拟主机正在重定向请求,因此我必须设置以下选项以使其转发发布数据: curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTREDIR, 3);

标签: php curl laravel


【解决方案1】:

CURLOPT_POSTFIELDS 不是 json 编码的字符串。它需要一个查询字符串(类似于URL-s中问号后的查询字符串)。

这应该可行:

$data_string = http_build_query($data, '', '&');

或者你可以让 cURL 扩展来做脏活,并传递一个带有键值对的数组作为值:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

来自PHP.net

此参数可以作为 urlencoded 字符串(如 'para1=val1&para2=val2&...')传递,也可以作为字段名称作为键、字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。

【讨论】:

    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2014-02-09
    • 1970-01-01
    相关资源
    最近更新 更多