Python Foursquare API Checkin Add 突然开始返回 <Response [403]>

Posted

技术标签:

【中文标题】Python Foursquare API Checkin Add 突然开始返回 <Response [403]>【英文标题】:Python Foursquare API Checkin Add suddenly started returning <Response [403]> 【发布时间】:2019-04-02 15:34:20 【问题描述】:

我有一个程序可以在 Foursquare 上进行自动签到。直到大约几天前它开始返回 Response [403] 时,它一直运行良好。奇怪的是,我找到了一些示例代码来通过 php 做同样的事情,并且运行良好。

PHP 和 Python 版本都使用相同的 Oauth 令牌。

PHP 版本:

<?php
$fields_string = http_build_query(array(
'oauth_token'=>'***REDACTED***',
'venueId'=> '4e769e971838f9188a5e2a03',
'v'=>'20180801',
'broadcast'=>'public'
));
$url = "https://api.foursquare.com/v2/checkins/add";
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//execute post
$checkin = curl_exec($ch);
// Check if any error occured
if(curl_errno($ch)) 
echo 'Curl error: ' . curl_error($ch);

//close connection
curl_close($ch);
$json=json_decode($checkin);
echo $checkin;
echo $json->meta->code;
?>

Python 版本:

import json, requests

checkinURL = 'https://api.foursquare.com/v2/checkins/add'

checkinParams = dict(
oauth_token = '***REDACTED***',
venueId = '4e769e971838f9188a5e2a03',
v = 20180801,
broadcast = 'public'
)

checkin = requests.post(url=checkinURL, params=checkinParams)
print (checkin)

这是来自 Python 的调试:

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.foursquare.com:443
send: b'POST /v2/checkins/add?oauth_token=***REDACTED***&ll=21.281656%2C-157.677465&limit=1&venueId=4e769e971838f9188a5e2a03&shout=Testing&v=20180801&broadcast=public HTTP/1.1\r\nHost: api.foursquare.com\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/39.0.2171.95 Safari/537.36\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n'
reply: 'HTTP/1.1 403 Unauthorized\r\n'
header: Server: Varnish
header: Retry-After: 0
header: Content-Length: 2713
header: Content-Type: text/html
header: Accept-Ranges: bytes
header: Date: Mon, 29 Oct 2018 06:46:48 GMT
header: Via: 1.1 varnish
header: Connection: close
header: X-Served-By: cache-bur17527-BUR
header: X-Cache: MISS
header: X-Cache-Hits: 0
DEBUG:urllib3.connectionpool:https://api.foursquare.com:443 "POST /v2/checkins/add?oauth_token=***REDACTED***&ll=21.281656%2C-157.677465&limit=1&venueId=4e769e971838f9188a5e2a03&shout=Testing&v=20180801&broadcast=public HTTP/1.1" 403 2713
<Response [403]>

【问题讨论】:

Foursquare api consumer disabled的可能重复 看起来他们引入了基于用户代理的请求阻止......我在 CLI 上的 curl 和 Go HTTP 客户端上遇到了同样的问题。将用户代理设置为浏览器 (Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0) 使错误消失……似乎 PHP-Curl 用户代理默认列入白名单,而 curl / Go HTTP 客户端则没有…… 我认为你是对的。当我在我的代码中添加一个用户代理时,它又开始工作了。 headers = 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' 【参考方案1】:

解决了!

我加了

headers = 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'

然后添加

headers=headers

到 requests.post。

【讨论】:

以上是关于Python Foursquare API Checkin Add 突然开始返回 <Response [403]>的主要内容,如果未能解决你的问题,请参考以下文章

Python Foursquare API Checkin Add 突然开始返回 <Response [403]>

如何使用foursquare api在foursquare上添加新的特价商品

Foursquare 场地搜索 API:如何找到最近的场地?

Foursquare Tips:网站上API和Explore的区别

Foursquare API nearByVenue 服务问题

场地外搜索 Foursquare API