PHP 中的 HTTP POST

我正在尝试使用 PHP 发布 JSON 有效负载,但无法使其正常工作。我有以下适用于 Shell 的 CURL 命令以及以下也适用的 Python 代码,但需要 PHP 实现相同的功能。


壳牌上的卷曲:


curl -H "Content-Type: application/json" -X POST -d '{"Content":" <CONTENT OF THE MESSAGE> "}' <URL of the node receiving POST data>

Python:


#!/usr/bin/python

# -*- coding: utf-8 -*-


import requests


headers = {

  'Content-type': 'application/json',

}


auth = '<URL>'


line1 = '<CONTENT of message>'


data = '{"Content":"%s"}' % (line1)

response = requests.post(url = auth, headers = headers, data = data)

到目前为止我在 PHP 中所拥有的(不工作):


$data = array("Content" => "<CONTENT of the message>");                                                                    

$data_string = json_encode($data);                                                                                   


$ch = curl_init('<URL>');                                                                      

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      

curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          

    'Content-Type: application/json',                                                                                

    'Content-Length: ' . strlen($data_string))                                                                       

);                                                                                                                   


$result = curl_exec($ch);

提前非常感谢任何和所有帮助!


偶然的你
浏览 141回答 2
2回答

互换的青春

试试这个代码。&nbsp; &nbsp; $ch = curl_init( );&nbsp; &nbsp; $data = array("Content" => "<CONTENT of the message>");&nbsp; &nbsp; $headers = array(&nbsp; &nbsp; 'Content-Type: application/json'&nbsp; &nbsp; );&nbsp; &nbsp; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);&nbsp;&nbsp; &nbsp; curl_setopt ( $ch, CURLOPT_URL, $url );&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; curl_setopt ( $ch, CURLOPT_POST, 1 );&nbsp; &nbsp; curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );&nbsp; &nbsp; curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data);&nbsp; &nbsp; // Allow cUrl functions 20 seconds to execute&nbsp; &nbsp; curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 );&nbsp; &nbsp; // Wait 10 seconds while trying to connect&nbsp; &nbsp; curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );&nbsp; &nbsp; $output = array();&nbsp; &nbsp; $output['server_response'] = curl_exec( $ch );&nbsp; &nbsp; $curl_info = curl_getinfo( $ch );&nbsp; &nbsp; $output['http_status'] = $curl_info[ 'http_code' ];&nbsp; &nbsp; $output['error'] = curl_error($ch);&nbsp; &nbsp; curl_close( $ch );&nbsp; &nbsp; return $output;

心有法竹

看起来你在那里做的一切都是正确的(除了第 10+11 行可怕的缩进,让你看起来好像错过了)实际上不是的),你只是缺少错误检查代码来调试它, 尝试:$stderrh=tmpfile();curl_setopt_array($ch,[CURLOPT_VERBOSE=>1,CURLOPT_STDERR=>$stderrh]);$result = curl_exec($ch);rewind($stderrh); // https://bugs.php.net/bug.php?id=76268var_dump(stream_get_contents($stderrh),$result);详细日志应该告诉你问题是什么,它说了什么?(同样你在<?php开始时错过了,你可能想在最后添加。如果响应是可压缩的(如 JSON 或 HTML 或文本),你还可以添加以使 curl 使用压缩进行传输,var_dump($result);以加快速度,CURLOPT_ENCODING=>''这通常会加快速度)
打开App,查看更多内容
随时随地看视频慕课网APP