Wordpress cURL 可以工作,但 wp_remote_request 不行

问题描述 投票:0回答:2

我的代码可以使用 cURL 但不能使用 wp_remote_request。

cURL 代码是:

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'GET',
        CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer '.$bc_auth_token
        ),
    ));

    $response = curl_exec($curl);
    curl_close($curl);

wp_remote_request代码是:

    $args = array(
    'method' => 'GET',
    'sslverify' => false, 
    'headers' => array( 
    'Authorization' => 'Bearer '.$bc_auth_token, 
    'Content-Type' => 'application/json')
    );
    
    $response = wp_remote_request($url, $args);

cURL 按预期返回数据。 wp_remote_request 返回以下内容:

(
[headers] => Requests_Utility_CaseInsensitiveDictionary Object
    (
        [data:protected] => Array
            (
                [content-type] => application/xml
                [content-encoding] => gzip
                [vary] => Accept-Encoding
                [server] => Microsoft-HTTPAPI/2.0
                [access-control-allow-headers] => Origin, X-Requested-With, Authorization
                [access-control-allow-origin] => *
                [access-control-allow-credentials] => true
                [ms-correlation-x] => fc9da5c7-b168-4cbd-9246-68ac510a8b93
                [x-content-type-options] => nosniff
                [strict-transport-security] => max-age=31536000; includeSubDomains
                [access-control-expose-headers] => ms-correlation-x
                [date] => Tue, 08 Jun 2021 23:31:43 GMT
            )

    )

[body] => <error xmlns="http://docs.oasis-open.org/odata/ns/metadata"><code>RequestDataInvalid</code><message>Request data is invalid.</message></error>
[response] => Array
    (
        [code] => 400
        [message] => Bad Request
    )

[cookies] => Array
    (
    )

[filename] => 
[http_response] => WP_HTTP_Requests_Response Object
    (
        [response:protected] => Requests_Response Object
            (
                [body] => <error xmlns="http://docs.oasis-open.org/odata/ns/metadata"><code>RequestDataInvalid</code><message>Request data is invalid.</message></error>
                [raw] => HTTP/1.1 400 Bad Request
            )
    )    
(Transfer-Encoding: chunked
Content-Type: application/xml
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-HTTPAPI/2.0
Access-Control-Allow-Headers: Origin, X-Requested-With, Authorization
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
ms-correlation-x: fc9da5c7-b168-4cbd-9246-68ac510a8b93
x-content-type-options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Access-Control-Expose-Headers: ms-correlation-x
Date: Tue, 08 Jun 2021 23:31:43 GMT
Connection: close)

我已经尝试了很多方法,但我看不出 wp_remote_request 不起作用的任何原因。

有人有任何见解吗?

谢谢。

wordpress php-curl
2个回答
0
投票

我最近也遇到了同样的事情。

wp_remote_request
向请求添加特殊的用户代理。例如
"WordPress\\/6.2.2; http:\\/\\/your-site.com"

在我的例子中,外部 API 将拒绝该用户代理的请求。

我能够为请求设置不同的用户代理并回避这个问题。

wp_remote_request($url, [
  'user-agent': null,
  'headers' => [
    'Authorization' => 'Bearer '.$bc_auth_token, 
  ]
]);

-1
投票
/* can you please below updated code where i have used wp_remote_get function instead of wp_remote_request function */    

     $args = array(
                'headers' => array(
                    'Authorization' => 'Bearer '.$bc_auth_token, 
                    'Content-Type' => 'application/json')
                )
            );
        $url= "your URL";
        $response = wp_remote_get( $url, $args );

        $response = json_decode($response['body'], true);
© www.soinside.com 2019 - 2024. All rights reserved.