簡體   English   中英

為什么一個http發帖請求無法正常工作但在curl中可以正常工作

[英]why an http post request isn't working in guzzle but works fine in curl

我正在向github o auth發送請求以獲取用戶的訪問令牌,並嘗試使用guzzle,但響應沒有任何價值,我不知道為什么,另一方面,當我使用curl時,它可以工作很好,並成功返回了訪問令牌,我正在使用guzzle的form_parms設置字段

這是一個令人吃驚的例子

public function fetchGithubToken(\Illuminate\Http\Request $request, $code)
    {


        $client = new \GuzzleHttp\Client();

        $response = $client->request('POST', 'https://github.com/login/oauth/access_token', [

            'form_params' => ['client_id' => env('GITHUB_CLIENTID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'code' => $code],
        ]);

        Log::error(print_r($response, true));
        return $response;


    }

這是curl的例子

    public function post_to_url($url, $data)
{
    $fields = '';
    foreach ($data as $key => $value) {
        $fields .= $key . '=' . $value . '&';
    }
    rtrim($fields, '&');

    $post = curl_init();

    curl_setopt($post, CURLOPT_URL, $url);
    curl_setopt($post, CURLOPT_POST, count($data));
    curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($post);

    curl_close($post);

    return $result;

}

public function fetchGithubToken(\Illuminate\Http\Request $request, $code)
{

    $data = ['client_id' => env('GITHUB_CLIENTID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'code' => $code];

    $response = $this->post_to_url("https://github.com/login/oauth/access_token", $data);

    Log::info(print_r($response, true));

    return $response;
}

您必須在cURL中添加身份驗證。 您必須使用以下語句,因為github需要身份驗證:

curl_setopt($process, CURLOPT_USERPWD, $data['username'] . ":" . $data['$password']);

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM