Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Post到Python HTTP服务器不工作_Java_Python_Http_Post_Webserver - Fatal编程技术网

Java Post到Python HTTP服务器不工作

Java Post到Python HTTP服务器不工作,java,python,http,post,webserver,Java,Python,Http,Post,Webserver,这是我的python服务器代码 #Copyright Jon Berg , turtlemeat.com import string,cgi,time from os import curdir, sep from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer #import pri class MyHandler(BaseHTTPRequestHandler): # our servers current set

这是我的python服务器代码

#Copyright Jon Berg , turtlemeat.com

import string,cgi,time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
#import pri

class MyHandler(BaseHTTPRequestHandler):

    # our servers current set ip address that clients should look for.
    server_address = "0.0.0.0"

    def do_GET(self):
        try:
            if self.path.endswith(".html"):
                f = open(curdir + sep + self.path)
                self.send_response(200)
                self.send_header('Content-type',    'text/html')
                self.end_headers()

                str = ""
                seq = ("<HTML>", MyHandler.server_address, "</HTML>")
                str = str.join( seq )
                print str
                self.wfile.write( str )
                return
            return

        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)


    def do_POST(self):
        global rootnode

        try:
            ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
            if ctype == 'application/x-www-form-urlencoded':
                query=cgi.parse_multipart(self.rfile, pdict)
            self.send_response(301)

            self.end_headers()
            MyHandler.server_address = "".join( query.get('up_address') )
            print "new server address", MyHandler.server_address
            self.wfile.write("<HTML>POST OK.<BR><BR>")

        except :
            pass

def main():
    try:
        server = HTTPServer(('', 80), MyHandler)
        print 'started httpserver...'
        server.serve_forever()
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()
这一切看起来很简单,但我无法成功地发布到服务器。我犯了两个错误中的一个

服务器要么从不获取请求(python打印输出不会发生),要么获取请求(打印),但不更改值(执行时打印更改)

最初的python服务器教程附带了一个html页面,该页面带有一个用于直接更新值的表单。这个表单页面工作得非常好。但是我需要能够从Java发布

我也使用了以下apache代码,但它也不起作用

HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(address);
        try {
          List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
          nameValuePairs.add(new BasicNameValuePair( post_key, post_value));
          post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

          HttpResponse response = client.execute(post);
          BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
          String line = "";
          while ((line = rd.readLine()) != null) {
            System.out.println(line);
          }

        } catch (IOException e) {
          e.printStackTrace();
        }
HttpClient=newdefaulthttpclient();
HttpPost=新的HttpPost(地址);
试一试{
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(post_键,post_值));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=client.execute(post);
BufferedReader rd=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
字符串行=”;
而((line=rd.readLine())!=null){
系统输出打印项次(行);
}
}捕获(IOE异常){
e、 printStackTrace();
}
我不知道出了什么问题。如果有帮助的话,我的文字POST键/值是“up_address=10.0.1.2”


这就是所有的代码。您看到它有什么问题吗?

我无法识别问题。不过我相信这是python服务器代码

我决定将服务器重新实现为带有参数的GET,而不是GET和POST。我导入urlparse以获取附加到url()的键。然后我只查找我期望的w/e键

这是我的新服务器代码…(预期参数为'up_address':'10.0.1.2')


这似乎很适合我的项目需要。

服务器地址变量是特定其他计算机地址的值。使用
urlparse.parse\u qs()
而不是用于x-www-form-urlcoded数据的cgi.parse\u多部分。我会尝试一下,并让您知道它是如何运行的(ty用于您的响应).no,将…cgi.*…替换为…urlparse.parseqs(self.rfile,pdict)…不起作用。服务器发送301响应,但似乎找不到Java应用程序正在发送的查询.get()。请阅读文档以进行解析。它需要一个字符串,例如:“key1=value1&key2=value2”
HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(address);
        try {
          List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
          nameValuePairs.add(new BasicNameValuePair( post_key, post_value));
          post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

          HttpResponse response = client.execute(post);
          BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
          String line = "";
          while ((line = rd.readLine()) != null) {
            System.out.println(line);
          }

        } catch (IOException e) {
          e.printStackTrace();
        }
import string,cgi,time, urlparse
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
#import pri

class MyHandler(BaseHTTPRequestHandler):

    # our servers current set ip address that clients should look for.
    server_address = "0.0.0.0"

    def do_GET(self):
    qs = {}
    path = self.path
    if '?' in path:
        path, tmp = path.split('?', 1)
        qs = urlparse.parse_qs(tmp)
        MyHandler.server_address = qs['up_address']
        print 'new server address: ', MyHandler.server_address


def main():
    try:
        server = HTTPServer(('', 8080), MyHandler)
        print 'started httpserver...'
        server.serve_forever()
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()