在PHP中使用标头的curl请求

3
我希望能够向一个URL发出cURL请求,并携带以下头信息: 'Content-Type: application/json', 'Authorization': 'Basic XXXXXXXXXX' 我已经有了下面的代码:
<?php

$post_url = "https://api.interlinkexpress.com/user/?action=login";

$curl = curl_init($post_url);

$headers = array(
        'Content-Type: application/json',
        'Authorization': 'Basic XXXXXXXXX'
        );
//curl_setopt($curl, CURLOPT_USERPWD, "username":"Password");
curl_setopt($curl, CURLOPT_URL, $post_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
//curl_setopt($curl, CURLOPT_POSTFIELDS,json_encode($post_data) );
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
$post_response = curl_exec($curl); 

?>

它显示的结果是:

客户端发送了错误请求

这是$header数组下的'Authorization...'行。
如有建议或帮助,将不胜感激。

尝试在头部添加一些用户代理。 - stil
2个回答

8
问题在于头文件上。它需要被修复。授权将成为以下字符串:
$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic XXXXXXXXX'
    );

让我给你一个完整的curl示例:

 function CurlSendPostRequest($url,$request)
    {
        $authentication = base64_encode("username:password");

        $ch = curl_init($url);
        $options = array(
                CURLOPT_RETURNTRANSFER => true,         // return web page
                CURLOPT_HEADER         => false,        // don't return headers
                CURLOPT_FOLLOWLOCATION => false,         // follow redirects
               // CURLOPT_ENCODING       => "utf-8",           // handle all encodings
                CURLOPT_AUTOREFERER    => true,         // set referer on redirect
                CURLOPT_CONNECTTIMEOUT => 20,          // timeout on connect
                CURLOPT_TIMEOUT        => 20,          // timeout on response
                CURLOPT_POST            => 1,            // i am sending post data
                CURLOPT_POSTFIELDS     => $request,    // this are my post vars
                CURLOPT_SSL_VERIFYHOST => 0,            // don't verify ssl
                CURLOPT_SSL_VERIFYPEER => false,        //
                CURLOPT_VERBOSE        => 1,
                CURLOPT_HTTPHEADER     => array(
                    "Authorization: Basic $authentication",
                    "Content-Type: application/json"
                )

        );

        curl_setopt_array($ch,$options);
        $data = curl_exec($ch);
        $curl_errno = curl_errno($ch);
        $curl_error = curl_error($ch);
        //echo $curl_errno;
        //echo $curl_error;
        curl_close($ch);
        return $data;
    }

我已经这样做了。然后它告诉我在以下代码中存在一些问题:curl_setopt($curl, CURLOPT_USERPWD, "scally":"scally");由于我已经在标头中编码了用户名和密码,因此我将其删除。现在它显示:客户端发送了错误请求。 - Jiteen
有没有示例代码,我可以将一个POST请求和上述两个标头一起发送到URL? - Jiteen
谢谢。我已经检查了上面提供的代码。但是,我不知道那个“$request”是什么意思。请帮助我如何调用所提到的函数。 - Jiteen
没有API文档。实际上也没有请求。我只想使用凭据登录。用户名和密码是我的凭据,需要进行Base 64编码。我应该删除$request吗? - Jiteen
实际上,一个POST请求必须有请求体。 - Sabbir Ahmed Sourove
显示剩余7条评论

0

500错误通常表示错误出现在服务器端。您可以尝试模拟您的请求(我个人建议使用高级ReST客户端,这是一个谷歌浏览器应用程序),以验证是否是这种情况。


你说得对。我刚刚将文件上传到另一个服务器上,发现了新的错误。实际上,在之前的服务器上,错误列表没有启用,因此可能会重定向到500错误页面。感谢您提供的信息,也感谢您的时间。但我的问题仍未得到解答。 - Jiteen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接