suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Wie behebe ich den Fehler, wenn PHP eine HTTP-Post-Seite anfordert?

Code:

<?php
/**
 * PHP发送Json对象数据
 *
 * @param $url 请求url
 * @param $jsonStr 发送的json字符串
 * @return array
 */
function http_post_json($url, $jsonStr){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Content-Length: ' . strlen($jsonStr)
        )
    );
    $response = curl_exec($ch);//执行一个cURL会话,成功时返回tru,失败返回false
    $err = curl_error($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);//获取最后一次传输的相关信息,最后一个收到的HTTP代码

    curl_close($ch);
 
    return array($httpCode, $response, $err);
}

$time = time();

$url = "https://openapi.lechange.cn/openapi/accessToken";

$str = "phone:17691200000,time:{$time},nonce:49735441495760803893403522385895,appSecret:6d5c2c723dbb4ba78fac5a0e9ece81";

$str = md5($str);

$params = array(
            "system"=>array(
                'ver'=>'1.0',
                'sign'=>$str,
                'appid'=>'lcce1fdddaa5de4322',
                'time'=>"$time",
                'nonce'=>'49735441495760803893403522385895'
            ),
            "params"=>array("phone"=>"17691200000"),
            "id"=>"80"
        );

$jsonparams = json_encode($params);
echo $jsonparams;
list($returnCode, $returnContent, $err) = http_post_json($url, $jsonparams);

echo $returnCode;
var_dump($returnContent);
echo $err;
?>

Während des Ausführungsprozesses werden zwei Fehler gemeldet.
(1)SSL certificate problem: unable to get local issuer certificate。php.iniNachdem der Datei die folgenden zwei Codezeilen hinzugefügt wurden, verschwindet dieser Fehler.

curl.cainfo="D:/wamp64/ca-bundle.crt"
openssl.cafile="D:/wamp64/ca-bundle.crt"

(2) Nachdem der obige Fehler verschwunden war, erschien er

502 Bad Gateway
The proxy server received an invalid response from an upstream server.

Es gibt jetzt wirklich keinen anderen Weg. . Selbst wenn die Parameter oder die Signatur falsch sind, gibt der andere Server einen Fehlercode zurück, dieser 502 bietet jedoch nicht einmal die Möglichkeit, den Fehlercode zurückzugeben. Bitten Sie Gott um Hilfe bei der Lösung.

PHP中文网PHP中文网2753 Tage vor515

Antworte allen(5)Ich werde antworten

  • 天蓬老师

    天蓬老师2017-05-16 13:18:17

    wamp服务器怎么会由502?502是反向代理错误。
    你本地的apache+php+mysql+windows是反向代理模式运行还是apache2 handler形式?

    Antwort
    0
  • 为情所困

    为情所困2017-05-16 13:18:17

    明显是对方网站挂了啊……浏览器直接打开也是502

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:18:17

    提示比较明显了。后端服务有问题,所以 upstream 返回有 502。

    对方的后端服务在响应你的请求时返回了一个代理不接受的结果(一般是 4XX,5XX)。

    有两种情况:

    1. 对方后端服务本来认为不应该有 5XX 的结果(或者对方后端服务宕了),所以 upstream 不支持接受这类结果。那就是让对方改服务,不要返回 5xx 错误。

    2. 对方后端服务认为支持用 4xx/5xx 表示一些结果(常见于 Restful 服务),那需要对方修改 upstream 配置,支持这类结果作为正常结果返回。

    Antwort
    0
  • PHPz

    PHPz2017-05-16 13:18:17

    Set : CURLOPT_SSL_VERIFYPEER => false

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-16 13:18:17

    请求页面,接口调试,用postman。非常好用的一个工具。模拟请求,可以方便拿到请求实例代码

    Antwort
    0
  • StornierenAntwort