从sever1读取JSON响应并返回与server3

时间:2015-10-21 12:22:07

标签: php python json codeigniter

我有以下安排。

Server3有一个在server3上运行的Codeigniter应用程序.S3使用这样的标题调用s2

$parse_auth = $this->parse->login($result->email, $this->input->post('password'));

现在,在S2上,我有一个python脚本,它调用外部Parse API,返回JSON响应; 这是完整的代码:

import SimpleHTTPServer
import SocketServer
import logging
import cgi
import urllib2
import json

PORT = 9500
headers = None
BASE_URL = 'https://api.parse.com'

class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):

def do_GET(self):
    SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
    args = self.path
    parse_url = BASE_URL+args
    opener = urllib2.build_opener()
    opener.addheaders = [('Accept', self.headers.getheader('Accept')),('X-Parse-Application-Id', self.headers.getheader('X-Parse-Application-Id')),('X-Parse-Client-Version', self.headers.getheader('X-Parse-Client-Version')),('X-Parse-REST-API-Key', self.headers.getheader('X-Parse-REST-API-Key'))]
    response = opener.open(parse_url)
    print response.read()
    self.send_response(200)
    self.send_header('Content-Type', 'application/json')
    self.end_headers()
    self.wfile.write(json.dumps(response.read()))// I tried without json.dumps, didn't work

def do_POST(self):
    form = cgi.FieldStorage(
        fp=self.rfile,
        headers=self.headers,
        environ={'REQUEST_METHOD':'POST',
                 'CONTENT_TYPE':self.headers['Content-Type'],
                 })

    SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)

Handler = ServerHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

当我在s2上打印S1的响应时,它显示为JSON。

但是当我打印数组 $ parse_auth 时我得到了

-1
Bad Request

我希望S3接收正确的JSON响应。怎么做。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好了开始你总是要使用json.dumps()或jsonify()来正确格式化你的传出JSON。但是对于你的问题,它看起来应该可行,但是你的PHP服务器采取什么样的路由?它可能与请求标头有关。

另外,你有没有理由使用python urllib?这些问题正是请求模块旨在通过让您不必担心请求标头等问题来防止这些问题。

http://docs.python-requests.org/en/latest/

发送您的请求可能就像这样简单。

>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}