Php 从服务器1读取JSON响应并返回与服务器3相同的JSON响应

Php 从服务器1读取JSON响应并返回与服务器3相同的JSON响应,php,python,json,codeigniter,Php,Python,Json,Codeigniter,我有以下安排 Server3有一个运行在Server3上的Codeigniter应用程序。S3使用如下标题调用s2 $parse_auth = $this->parse->login($result->email, $this->input->post('password')); 现在,在S2上,我有一个python脚本,它使调用成为一个外部解析API,返回JSON响应; 以下是完整的代码: import SimpleHTTPServer import Socke

我有以下安排

Server3有一个运行在Server3上的Codeigniter应用程序。S3使用如下标题调用s2

$parse_auth = $this->parse->login($result->email, $this->input->post('password'));
现在,在S2上,我有一个python脚本,它使调用成为一个外部解析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

但是在S3上,当我打印数组时,$parse\u auth我得到

-1
Bad Request
我希望S3收到正确的JSON响应。怎么做


提前感谢。

首先,您必须始终使用json.dumps()或jsonify()来正确格式化传出的json。但对于您的问题,这看起来应该是可行的,但是您的PHP服务器是通过什么途径接收请求的呢?它可能与请求头有关

另外,您使用python urllib有什么原因吗?这些类型的问题正是requests模块设计用来防止的,因为您不必担心请求头之类的事情

发送您的请求可能就这么简单

>>> 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, ...}

我在do_GET的第一行错误地调用了SimpleHTTPServer.simplehtprequesthandler.do_GET(self),这导致了错误的响应。