Java Post到Python HTTP服务器不工作
这是我的python服务器代码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
#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()