2017-01-07 3 views
2

Я пытаюсь получить доступ к XML-документу через API. Когда я пытаюсь подключиться в python, я получаю код статуса 403. Однако, когда я вставляю ссылку в хромовый браузер, данные представляются так, как должно быть. Я понимаю, что мне могут понадобиться некоторые заголовки, добавленные в мой запрос на Python, но я не уверен, как это сделать.Подключение к API через web vs python

schedule = requests.get('https://api.sportradar.us/golf-t2/schedule/pga/2015/tournaments/schedule.xml?api_key=mssbj55v2wbrbr6jcet2xcdd') 
print(schedules.status_code) 

Я был в состоянии получить мои заголовки в хроме, но я не уверен, какие из них нужно добавить к моей просьбе

Accept: Текст/HTML, приложение/XHTML + XML, приложение/XML ; д = 0,9, образ/WebP, /; д = 0,8

User Agent: Mozilla/5.0 (Windows NT, 10.0; Win64; 64) AppleWebKit/537,36 (KHTML, как Gecko) хром/55,0. 2883,87 Сафари/537,36

Как я могу настроить свой запрос, чтобы вернуть статус 200?

+1

Может быть, лучше не публиковать реальный API ключ здесь ;-), и, возможно, лучше всего ожидать документацию на sportradar.us (поставщик услуги) – Dilettant

+1

Я проверил документацию и ничего не нашел в заголовках. Также - если я не включу полную ссылку, мне расскажут, что они не повторяются. Так что я проклят, если буду, проклятый, если я этого не сделаю. Это пробный API-ключ, поэтому я не очень беспокоюсь об этом. Но спасибо за помощь. –

+1

Хороший ответ от Евгения, и я думаю, что вы сделали свое исследование, тем самым поддержали вопрос ;-) – Dilettant

ответ

3

Включить все другие заголовки браузеров в запрос. Самый простой способ: открыть ссылку на Chrome, открыть Dev Tools, вкладку Network, затем щелкнуть правой кнопкой мыши и «Копировать как cURL». Вставить в консоли и проверить это достаточно:

$ curl 'https://api.sportradar.us/golf-t2/schedule/pga/2015/tournaments/schedule.xml?api_key=mssbj55v2wbrbr6jcet2xcdd' -H 'Accept-Encoding: gzip, deflate, sdch, br' -H 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2' -H 'Upgrade-Insecure-Requests: 1' -H 'X-Compress: null' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'If-None-Match: "c97bea3f0b2917ae53554f338c416859"' -H 'Connection: keep-alive' -H 'If-Modified-Since: Wed, 07 Oct 2015 02:41:03 GMT' --compressed ; 

выход:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:s="http://feed.elasticstats.com/schema/golf/schedule-v1.0.xsd" 
      exclude-result-prefixes="s" version="1.0"> 

<xsl:output method="html" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
.... 

Затем добавить заголовки к вашему приложению с:

http://docs.python-requests.org/en/master/user/quickstart/#custom-headers

>>> url = 'https://api.github.com/some/endpoint' 
>>> headers = {'user-agent': 'my-app/0.0.1'} 

>>> r = requests.get(url, headers=headers) 
+0

Спасибо! Я до сих пор не понимаю, что именно делает пользователь user-agent, но мне удалось получить код состояния 200. Очень ценим! –

+0

'User-Agent' - это имя браузера или приложения, которое отправляет запрос. Некоторые разработчики API считают, что они могут блокировать боты с помощью проверок «User-Agent». Но, конечно, любой бот может что-то отправить, так что это абсолютно ненадежно. –

+0

Отличный смысл. Еще раз спасибо! –

Смежные вопросы