2016-11-24 2 views
0

Я пытаюсь прочитать JSON после того, как отправил url-запрос с urllib2.чтениеJSON с simplejson python

мой код:

request = urllib2.Request("https://127.0.0.1:443/myAPI", data=form_data, headers=headers) 
response = urllib2.open(request) 

Таким образом, проблема, когда я пытаюсь читать JSON из объекта ответа. я делаю это как то

simplejson.loads(response.read()) 

ошибки я получаю:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/opt/new/main3/python/simplejson/__init__.py", line 385, in loads 
    return _default_decoder.decode(s) 
    File "/opt/new/main3/python/simplejson/decoder.py", line 402, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/opt/new/main3/python/simplejson/decoder.py", line 420, in raw_decode 
    raise JSONDecodeError("No JSON object could be decoded", s, idx) 
simplejson.decoder.JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0) 

интересной части, когда я посылаю запрос в браузере Firefox, я печатаю адрес 127.0.0.1/myAPI на линии url, я получаю json на экране, и я могу видеть его в режиме отладки как JSON {"hosts": [{"host": "127.0.0.1: 4448 "}]}

поэтому JSON справедливо ..

при отладке я получаю эту страницу:

<!DOCTYPE html> 
<html> 
<head> 
    <!-- framebusting --> 
    <style> 
     html{display : none ;} 
    </style> 
    <script type="text/javascript"> 
     if (self == top) { 
      document.documentElement.style.display = "block"; 
     } else { 
      top.location = self.location; 
     } 
    </script> 
    <script type="text/javascript" src="js/detectBrowser.js"></script> 
    <meta charset="utf-8"/> 
    <link rel="StyleSheet" href="css/forensics.css" type="text/css" media="screen"/> 
</head> 
<body> 
    <script type="text/javascript" src="libs/requirejs/require.js" data-main="js/login.js"></script> 
</body> 
</html> 

является любой один есть способ решить эту проблему, или как я могу читать текст JSON прямо из объект ответить, или даже смотреть на что при отладке

Я ценю муравей помощь, я пытаюсь наименее 3-х дней, чтобы понять это Благодаря

+0

Попробуйте распечатать ответ, чтобы проверить, что он аналогичен браузеру, выполнив 'print response.read() '' и разместив результат здесь. Также возможно, что возвращенные строки имеют некоторый невидимый управляющий символ, который ваш браузер не отображает, но делает simplejson терпит неудачу. Antoine

+0

<тип скрипта = "текст/JavaScript"> если (само == верх) { document.documentElement.style.display = "block"; } else { top.location = self.location; } – yntnm

+0

<тип скрипта = "текст/JavaScript" SRC = "JS/detectBrowser.js"> <мета кодировка = "UTF-8" /> <ссылка отн = "StyleSheet" HREF = "CSS/forensics.css "type =" text/css "media =" screen "/> yntnm

ответ

0

так это было мое плохое и апи был нужен coockie. после добавления заголовка файла cookie я получал правильный JSON

0

Я думаю, что это из-за этого simplejson.loads(response .read()). У вас есть пространство между ответом и .read()

Попробуйте следующее:

request = urllib2.Request("https://127.0.0.1:443/myAPI", data=form_data, headers=headers) 
response = urllib2.open(request) 
response_body = response.read() 
response_body_json = simplejson.loads(response_body) 
+0

нет ... в реальном коде у меня нет. И я исправлю это здесь также – yntnm

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