Я пытаюсь получить доступ к сетевым профилям, используя API LinkedIn, следуя инструкциям отсюда.
Я пишу свой код в Python.
Насколько я понимаю, я просто добавляю дополнительный заголовок к моему запросу HTTPSConnection:
обычный вызов:
connection.request (метод, relative_url, body = body, headers = {'Authorization': OAuth_header})
внесетевой вызов:
//эти значения были извлечены из http-заголовка, который я получил
name = x-li-auth-token
value = name: R8Y4
connection.request (метод, relative_url, body = body, headers = {'Authorization': OAuth_header, name: value})
Когда я делаю вызов вне сети, я получаю сообщение об ошибке:
ошибка:
статус: 401
временная метка: 1330027911625
request-id: VHUSL0J7TL
Код ошибки: 0
сообщение: [неавторизованный]. ОАЕ: k1tofeoqr4id | 2dc38f4e-73d1-4d31-9330-dd82aca89616 | * 01 | * 01:1330027911: CRc7YYYQRe2VS6woJpGX + qYVa/Q =
Я тестировал это как на моем собственном профиле, так и на фактическом профиле вне сети, без изменений в ошибке.
Из различных запросов API "значение" немного меняется, и я пробовал все варианты:
"Имя: R8Y4"
"Поиск-имя: R8Y4"
"OUT_OF_NETWORK: R8Y4"
Я предполагаю, что это связано с заголовками HTTP, но я не знаю, что не так.
Пожалуйста помоги! Спасибо.
Я не знаю, почему ваш звонок терпит неудачу. Здесь последовательность, использующая проверенную библиотеку oauth2 в python, включая весь HTTP-разговор.
Сначала выполните поиск: http://api.linkedin.com/v1/people-search:(people:(distance,id,first-name,last-name,headline,api-standard-profile-request))
Parameters (I'm using OAuth in the parameters for this call)
oauth_body_hash=2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D
oauth_nonce=41358038
oauth_timestamp=1330098205
oauth_consumer_key=xxx
oauth_signature_method=HMAC-SHA1
facet=network%2CO
oauth_version=1.0
oauth_token=xxx
keywords=Schneider+Electric
oauth_signature=xxx
Response includes:
<person>
<distance>-1</distance>
<id>UBAQYFeiHo</id>
<first-name></first-name>
<last-name>Private</last-name>
<headline>Assistant Engineer at Schneider Electric</headline>
<api-standard-profile-request>
<url>http://api.linkedin.com/v1/people/UBAQYFeiHo</url>
<headers total="1">
<http-header>
<name>x-li-auth-token</name>
<value>OUT_OF_NETWORK:wHti</value>
</http-header>
</headers>
</api-standard-profile-request>
</person>
Второй звонок, чтобы получить профиль: http://api.linkedin.com/v1/people/UBAQYFeiHo:(id,first-name,last-name)
Request headers:
Host: api.linkedin.com
x-li-auth-token: OUT_OF_NETWORK:wHti
accept-encoding: gzip, deflate
user-agent: Python-httplib2/$Rev$
Response:
{'status': '200', 'content-length': '158', 'content-location': u'http://api.linkedin.com/v1/people/UBAQYFeiHo:(id,first-name,last-name)?oauth_body_hash=2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D&oauth_nonce=27886786&oauth_timestamp=1330098212&oauth_consumer_key=xxx&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=xxx&oauth_signature=xxx', 'transfer-encoding': 'chunked', 'vary': '*', 'server': 'Apache-Coyote/1.1', '-content-encoding': 'gzip', 'date': 'Fri, 24 Feb 2012 15:43:34 GMT', 'x-li-request-id': 'N368G241EA', 'x-li-format': 'xml', 'content-type': 'text/xml;charset=UTF-8'}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
<id>UBAQYFeiHo</id>
<first-name></first-name>
<last-name>Private</last-name>
</person>
Код python, чтобы вторая часть работала с библиотекой oauth2:
import oauth2 as oauth
import time
url = "http://api.linkedin.com/v1/people/UBAQYFeiHo:(id,first-name,last-name)"
consumer = oauth.Consumer(
key="xxx",
secret="xxx")
token = oauth.Token(
key="xxx",
secret="xxx")
client = oauth.Client(consumer, token)
resp, content = client.request(url, headers={'x-li-auth-token':'OUT_OF_NETWORK:wHti'})
print resp
print content