Итак, я пытаюсь написать простой скрипт, который может аутентифицироваться с Tumblr с помощью OAUT. по причинам, выходящим за рамки этого вопроса, я не могу использовать какие-либо библиотеки, поэтому я должен сделать это самостоятельно. Кажется, я потерпел неудачу с самого первого шага этого. Это мой код до сих пор:
$requestTokenUrl = "http://www.tumblr.com/oauth/request_token";
$authorizeUrl = "http://www.tumblr.com/oauth/authorize";
$accessTokenUrl = "http://www.tumblr.com/oauth/access_token";
$oauthCallbackUrl = MY_URL;
$consumerKey = MY_KEY;
$oauthTimestamp = time();
$nonce = md5(mt_rand());
$oauthSignatureMethod = "HMAC-SHA1";
$oauthVersion = "1.0";
$sigBase = "POST&" . rawurlencode($requestTokenUrl) . "&". rawurlencode(
"oauth_callback=" . rawurlencode($oauthCallbackUrl)
. "oauth_consumer_key=" . rawurlencode($consumerKey)
. "&oauth_nonce=" . rawurlencode($nonce)
. "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
. "&oauth_timestamp=" . $oauthTimestamp
. "&oauth_version=" . $oauthVersion
);
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $requestTokenUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: OAuth oauth_consumer_key="' . $consumerKey . '",
oauth_timestamp="' . $oauthTimestamp . '",
oauth_nonce="' . $nonce . '",
oauth_callback="' . $oauthCallbackUrl . '",
oauth_signature_method="' . $oauthSignatureMethod . '",
oauth_version="' . $oauthVersion . '",
oauth_signature="' . $oauthSig . '"'
));
curl_setopt($ch, CURLOPT_POST, 1);
$output = curl_exec($ch);
Проблема в том, что я написал приведенный выше код, следуя инструкциям о oauth и twitter. Я попытался объединить некоторые из не очень хорошей документации Tumblr API. И теперь я получаю oauth 400 неправильный ответ на запрос, который я не могу как-то отладить. На самом деле ответ oauth таков:
HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>
и curl_getinfo показывает это:
'url' => string 'http://www.tumblr.com/oauth/request_token' (length=41)
'content_type' => string 'text/html' (length=9)
'http_code' => int 400
'header_size' => int 97
'request_size' => int 545
'filetime' => int -1
'ssl_verify_result' => int 0
'redirect_count' => int 0
'total_time' => float 0.377313
'namelookup_time' => float 0.028666
'connect_time' => float 0.198192
'pretransfer_time' => float 0.198388
'size_upload' => float 0
'size_download' => float 90
'speed_download' => float 238
'speed_upload' => float 0
'download_content_length' => float -1
'upload_content_length' => float -1
'starttransfer_time' => float 0.37721
'redirect_time' => float 0
'redirect_url' => string '' (length=0)
'primary_ip' => string '66.6.43.30' (length=10)
'certinfo' =>
array (size=0)
empty
'primary_port' => int 80
'local_ip' => string '192.168.1.70' (length=12)
'local_port' => int 52189
Есть ли способ узнать, что идет не так? Любая помощь будет оценена. Спасибо.
хорошо нашел проблему. в вариантах локон у меня было
curl_setopt($ch, CURLOPT_POST, 1);
но мне также нужно было добавить:
curl_setopt($ch, CURLOPT_POSTFIELDS, array());
Других решений пока нет …