[英]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.