为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 中的 HTTP POST

PHP 中的 HTTP POST

PHP
偶然的你 2022-06-11 18:46:34
我正在尝试使用 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 requestsheaders = {  '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);提前非常感谢任何和所有帮助!
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

试试这个代码。


    $ch = curl_init( );

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

    $headers = array(

    'Content-Type: application/json'

    );


    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

    curl_setopt ( $ch, CURLOPT_URL, $url );       

    curl_setopt ( $ch, CURLOPT_POST, 1 );

    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );

    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data);

    // Allow cUrl functions 20 seconds to execute

    curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 );

    // Wait 10 seconds while trying to connect

    curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );

    $output = array();

    $output['server_response'] = curl_exec( $ch );

    $curl_info = curl_getinfo( $ch );

    $output['http_status'] = $curl_info[ 'http_code' ];

    $output['error'] = curl_error($ch);

    curl_close( $ch );

    return $output;


查看完整回答
反对 回复 2022-06-11
?
心有法竹

TA贡献1866条经验 获得超5个赞

看起来你在那里做的一切都是正确的(除了第 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=76268

var_dump(stream_get_contents($stderrh),$result);

详细日志应该告诉你问题是什么,它说了什么?


(同样你在<?php开始时错过了,你可能想在最后添加。如果响应是可压缩的(如 JSON 或 HTML 或文本),你还可以添加以使 curl 使用压缩进行传输,var_dump($result);以加快速度,CURLOPT_ENCODING=>''这通常会加快速度)


查看完整回答
反对 回复 2022-06-11
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信