gpt4 book ai didi

php - 使用 PHP 的 OAuth 类的 Tumblr OAuth

转载 作者:可可西里 更新时间:2023-11-01 00:16:12 25 4
gpt4 key购买 nike

好吧,我被这个难住了。

我最近在这里下载并安装了 php 的 OAuth 库:http://us3.php.net/manual/en/book.oauth.php

使用它,我创建了一些测试代码来尝试连接到我的 Tumblr 帐户并发帖。

我能够获得 RequestToken 和授权。但是当我发出实际请求时,我得到一个错误:

Invalid auth/bad request (got a 404, expected HTTP/1.1 20X or a redirect)

我的请求 url 的格式是正确的 http://api.tumblr.com/v2/blog/account/post 。我正在发出 POST 请求。所以我不确定它为什么会返回 404。

这是我的代码:

<?php
$req_url = 'http://www.tumblr.com/oauth/request_token';
$authurl = 'http://www.tumblr.com/oauth/authorize';
$acc_url = 'http://www.tumblr.com/oauth/access_token';

$conskey = '123';
$conssec = '456';

session_start();

// In state=1 the next request should include an oauth_token.
// If it doesn't go back to 0
if(!isset($_GET['oauth_token']) && $_SESSION['state']==1) $_SESSION['state'] = 0;
try {
$oauth = new OAuth($conskey,$conssec);
$oauth->enableDebug();
if(!isset($_GET['oauth_token']) && !$_SESSION['state']) {
$request_token_info = $oauth->getRequestToken($req_url, 'http://www.domain.com/oauth.php');
$_SESSION['secret'] = $request_token_info['oauth_token_secret'];
$_SESSION['state'] = 1;

//Make authorize request with oauth_token
header('Location: '.$authurl.'?oauth_token='.$request_token_info['oauth_token']);
exit;
} else if($_SESSION['state']==1) {

//Callback code

$oauth->setToken($_GET['oauth_token'],$_SESSION['secret']);
$access_token_info = $oauth->getAccessToken($acc_url);
$_SESSION['state'] = 2;
$_SESSION['token'] = $access_token_info['oauth_token'];
$_SESSION['secret'] = $access_token_info['oauth_token_secret'];

}

//Make tumblr post request
$oauth->setToken($_SESSION['token'],$_SESSION['secret']);
$oauth->fetch("http://api.tumblr.com/v2/blog/account/post", null, OAUTH_HTTP_METHOD_POST, array('type'=>'text', 'body'=>'this is a test')); //error happens here
$json = json_decode($oauth->getLastResponse());
print_r($json);
} catch(OAuthException $E) {
print_r($E);
}
?>

非常感谢任何提示

最佳答案

我找到了答案。

问题出在这里:

$oauth->fetch("http://api.tumblr.com/v2/blog/account/post", null, OAUTH_HTTP_METHOD_POST, array('type'=>'text', 'body'=>'this is a test'));  //error happens here

首先,对于帐户,我只有我的博客名称。事实上,tumblr api 中描述的基本主机名需要采用“blogname.tumblr.com”格式。不仅仅是我拥有的“博客名称”。这将给出 400。

其次,获取参数的顺序错误。正确的顺序是这样的:

string $protected_resource_url [, array $extra_parameters [, string $http_method [, array $http_headers ]]] 

翻译成我的例子是...

$oauth->fetch("http://api.tumblr.com/v2/blog/blogname.tumblr.com/post", array('type'=>'text', 'body'=>'this is a test'), OAUTH_HTTP_METHOD_POST );

我写了一个教程来让它工作 here

关于php - 使用 PHP 的 OAuth 类的 Tumblr OAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com