2013-07-15 2 views
0

Я создаю скрипт, который будет называть API-интерфейс rest в python и выплевывает результаты в формате JSON. В моем коде я получаю несколько ошибок обратного следа. Как я могу решить эту проблему.Rest API для вывода в .json

'import sitecustomize' failed; use -v for traceback 
Traceback (most recent call last): 
    File "/home/Desktop/Sync.py", line 12, in <module> 
    url = urllib2.Request(request) 
    File "/usr/lib/python2.7/urllib2.py", line 202, in __init__ 
    self.__original = unwrap(url) 
    File "/usr/lib/python2.7/urllib.py", line 1057, in unwrap 
    url = url.strip() 
    File "/usr/lib/python2.7/urllib2.py", line 229, in __getattr__ 
    raise AttributeError, attr 
AttributeError: strip 

Вот код:

import urllib2 
import json 
url = "http://google.com" 
request = urllib2.Request(url) 
request.add_header("Authorization","Basic xxxxxxxxxxxxxxxxxx") 
socket = urllib2.urlopen(request) 
data = json.dumps(socket) 

hdrs = socket.headers 
source = socket.read() 
socket.close() 

print "---- Headers -----" 
print data 
print "---- Source HTML -----" 
print source 
print "---- END -----" 

value = 0 
for line in source.splitlines(): 
    if not line.strip(): continue 
    if line.startswith("value="): 
     try: 
      value = line.split("=") 
     except IndexError: 
      pass 
    if value > 0: 
     break 

open("some.json", "w").write("value is: %d" % value) 
+0

Используйте 'запросы' вместо' urllib2' - вам будет легче. Кроме того, это похоже на проблему с настройкой python. – Marcin

+0

По крайней мере, ваш 'json.loads' ни на чем не работает, и он потерпит неудачу. – zhangyangyu

+0

Попробуйте удалить 'url = urllib2.Request (request)' и заменить следующую строку 'socket = urllib2.urlopen (request)' – iraycd

ответ

0

Вы, кажется, есть проблема здесь:

request=urllib2.Request("http.google.com") 
request.add_header("Authorization","Basic xxxxxxxxxxxxxxxxxxxxxxxx=") 
url = urllib2.Request(request) 
socket = urllib2.urlopen(url) 

Вы пытаетесь создать объект запроса с именем "URL", передав Запросить объект в конструкторе.

См http://docs.python.org/2/library/urllib2.html#urllib2.Request

Попробуйте это:

request=urllib2.Request("http.google.com") 
request.add_header("Authorization","Basic xxxxxxxxxxxxxxxxxxxxxxxx=") 
socket = urllib2.urlopen(request) 
0

От documentation из Request класса:

URL должен быть строкой, содержащей корректный URL.

Вы собираетесь передать другой объект Request объекту его конструктору, так что это причина ошибки, которую вы видите. Правильный способ сделать это:

request=urllib2.Request("http.google.com") 
request.add_header("Authorization","Basic xxxxxxxxxxxxxxxxxxxxxxxx=") 
socket = urllib2.urlopen(request) 
+0

Я скопировал приведенный выше код и теперь его работу. Были некоторые корректировки в именовании, и это помогло –

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