wp_remote_post无效,服务器返回500

时间:2017-09-29 17:36:55

标签: php wordpress nginx

我正在尝试使用wp_remote_post在外部后端注册用户。

我的wordpress代码:

$url = 'https://example.com/users/register/';
$response = wp_remote_post( $url, array(
                        'method' => 'POST',
                        'timeout' => 60,
                        'redirection' => 5,
                        'httpversion' => '1.0',
                        'blocking' => true,
                        'headers' => array(),
                        'body' => array( 'email'     => $email,
                                         'name'      => $name,
                                         'last_name' => $last_name,
                                         'password'  => $password),
                        'cookies' => array()                            
                        )
                    );       

但我收到500错误:

  

[raw] => HTTP / 1.1 500内部服务器错误       服务器:nginx / 1.10.3(Ubuntu)       日期:2017年9月29日星期五17:31:14 GMT       内容类型:text / html       转移编码:分块       连接:关闭       X-Frame-Options:SAMEORIGIN

我不知道为什么。我用postman,curl和iOS App尝试了端点,它正在运行。所以,我认为问题是以某种方式使用Wordpress。可能是我从http而不是https提出请求吗?

这是nginx日志:

46.101.102.90 - - [29/Sep/2017:17:31:14 +0000] "POST /users/register/ HTTP/1.1" 500 38 "https://example.com/users/register/" "WordPress/4.8.2; http://www.lifecompanion.eu"

所以,请求即将到来,但不知何故它不起作用(我已经尝试'httpversion' => '1.1'以防万一,但是也遇到了同样的错误。

也许有人尝试过这样做,或者可以告诉我一个最好的方法。

1 个答案:

答案 0 :(得分:2)

似乎问题出在服务器端。如果您尝试使用application/x-www-form-urlencoded发送数据,则它不喜欢它并返回500状态代码。但是,如果它multipart/form-dataapplication/json有效。当您使用wp_remote_post并将HTTP协议设置为1.0时,您也不需要指定POST方法。

您可以尝试这样的事情:

$url = 'https://example.com/users/register/';
$response = wp_remote_post( $url, array(
    'timeout' => 60,
    'redirection' => 5,
    'blocking' => true,
    'headers' => array( 'Content-Type' => 'application/json' ),
    'body' => 
        json_encode( 
            array( 
                'email'     => $email,
                'name'      => $name,
                'last_name' => $last_name,
                'password'  => $password
            ) 
        ),
    'cookies' => array()                            
    )
);