簡體   English   中英

使用PHP進行GET請求

[英]Making GET requests using PHP

我正在嘗試向yesmail api發出一個簡單的GET請求,我具有可以直接粘貼到瀏覽器中的網址,並且它顯示正確的信息,並且如果我添加以下代碼(如Firefox的簡要文檔中所示) RESTClient我得到正確的響應:

GET https://services.yesmail.com/enterprise/subscribers?email=karina@email.co.uk HTTP/1.1
Accept-Encoding: gzip,deflate
User-Agent: Jakarta Commons-HttpClient/3.1
Authorization: Basic xxxxxxxxxxxxx
Host: services.yesmail.com

但是,當嘗試使用CURL進行連接時,我什么也沒收到,根本沒有HTTP響應,只是一個空白頁。 我不確定自己在做什么錯? 這就是我所擁有的:

$url = "https://services.yesmail.com/enterprise/subscribers?email=karina@email.co.uk";  
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "User Agent: Jakarta Commons-HttpClient/3.1";
$header[] = "Authorization: Basic xxxxxxxxxxxxx";
$header[] = "Host: services.yesmail.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch, CURLOPT_USERPWD, 'xxxxx:xxxxxxxxxx');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
$response = (curl_exec($ch));
print_r($response);
curl_close($ch);

我以為我輸入到RESTClient中的信息進入了CURL的標題中,這是我的錯嗎? 這是我第一次使用API​​,因此不勝感激。

更新當使用函數file_get_contents我得到正確的響應(對於GET方法,它只是一個具有我唯一的訂戶號的URL):

 $context = stream_context_create(array(
'http' => array(
    'header'  => "Authorization: Basic " . base64_encode("*******:********")
)
));
$data = file_get_contents('https://services.yesmail.com/enterprise/subscribers?email=karina@email.co.uk', false, $context);

 echo $data;

但是我真的很想讓CURL方法正常工作,因為我希望能夠添加一個訂閱者。

我實際上在Yesmail工作,所以我可以在這里為您提供幫助。

請嘗試以下代碼(確保將your-auth-here文本替換為base64編碼的身份驗證信息,並在$ym_api_url設置適當的URL)

<?php

// Set the HTTP headers needed for this API call.
$http_headers = array(
    "Authorization: Basic your-auth-here",
    "Accept: application/json",
    "Connection: close",                    // Disable Keep-Alive
    "Expect:"                               // Disable "100 Continue" server response
);

// URL Endpoint of the API to be called.
$ym_api_url = 'https://services.yesmail.com/enterprise/subscribers?email=karina@email.co.uk';

$curl_hdl = curl_init();

$curl_options = array(
    CURLOPT_VERBOSE => 1,                 // Verbose mode for diagnostics
    CURLOPT_HEADER => TRUE,               // Include the header in the output.
    CURLOPT_HTTPHEADER => $http_headers,  // HTTP headers to set
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,   // Use basic authentication.
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS, // Bitmask of protocols libcurl may use in this transfer
    CURLOPT_RETURNTRANSFER => TRUE,       // Return result as return value of curl_exec()
    CURLOPT_URL => $ym_api_url,           // URL to POST data to
);

curl_setopt_array($curl_hdl, $curl_options);

// Make the API call
$response = curl_exec($curl_hdl);

// Get the http response code
$http_response_code = curl_getinfo($curl_hdl, CURLINFO_HTTP_CODE);

curl_close($curl_hdl);

echo PHP_EOL . "INFO: HTTP Response Code was: " . $http_response_code . PHP_EOL;

if ( $response === false )
{
    echo PHP_EOL . "ERROR: curl_exec() has failed." . PHP_EOL;
}
else
{
    echo PHP_EOL . "INFO: Response Follows..." . PHP_EOL;
    echo PHP_EOL . $response;
}

?>

CURLOPT_VERBOSE => 1選項將輸出其他診斷信息。 記下那里的所有問題,看看是否指向特定問題。 解決問題后,您可以刪除或禁用這些選項。

另外,請記住,您可以隨時聯系Yesmail客戶經理並尋求幫助。

因此,您將獲得$response ,但不對其執行任何操作。

您的代碼中沒有一行可以顯示任何內容。

更新 :我看到您更新了您的問題。

一個非常重要的規則: 始終檢查API調用的返回值。

curl_exec()通過返回FALSE來指示錯誤,如果是這樣,請使用curl_error($ch)

暫無
暫無

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

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