2010-07-13 36 views
30

Tôi đang cố gắng tạo một Bảng ảo vào/ra siêu đơn giản bằng cách sử dụng wx/Python. Tôi đã có mã sau đây tại chỗ cho một trong các yêu cầu của tôi đến máy chủ nơi tôi sẽ lưu trữ dữ liệu:URL PythonLib/URLLib2 POST

data = urllib.urlencode({'q': 'Status'}) 

u = urllib2.urlopen('http://myserver/inout-tracker', data) 

for line in u.readlines(): 
    print line 

Không có gì đặc biệt xảy ra ở đó. Vấn đề tôi gặp phải là, dựa trên cách tôi đọc tài liệu, điều này sẽ thực hiện Yêu cầu đăng bởi vì tôi đã cung cấp thông số dữ liệu và điều đó không xảy ra. Tôi có mã này trong chỉ mục cho url đó:

if (!isset($_POST['q'])) { die ('No action specified'); } 

echo $_POST['q']; 

Và mỗi lần tôi chạy ứng dụng Python tôi nhận được văn bản 'Không có hành động được chỉ định' được in trên bảng điều khiển của tôi. Tôi sẽ cố gắng thực hiện nó bằng cách sử dụng các đối tượng yêu cầu như tôi đã thấy một vài bản demo bao gồm những người, nhưng tôi tự hỏi nếu có ai có thể giúp tôi giải thích tại sao tôi không nhận được một yêu cầu đăng bài với mã này. Cảm ơn!

- EDITED -

Mã này hoạt động và bài viết để trang web của tôi đúng:

data = urllib.urlencode({'q': 'Status'}) 

h = httplib.HTTPConnection('myserver:8080') 

headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} 

h.request('POST', '/inout-tracker/index.php', data, headers) 

r = h.getresponse() 

print r.read() 

Tôi vẫn không chắc chắn lý do tại sao các thư viện urllib2 không Đăng khi tôi cung cấp các tham số dữ liệu - với tôi các tài liệu chỉ ra rằng nó nên.

+0

Tại sao bạn không sử dụng 'urllib2'? –

+3

Tôi. 'urllib2.urlopen'. Tôi chỉ sử dụng urllib để mã hóa dữ liệu bài đăng. –

Trả lời

41
u = urllib2.urlopen('http://myserver/inout-tracker', data) 
h.request('POST', '/inout-tracker/index.php', data, headers) 

Sử dụng con đường /inout-tracker mà không có một trailing / không lấy index.php. Thay vào đó, máy chủ sẽ phát hành chuyển hướng 302 tới phiên bản có dấu sau /.

Thực hiện 302 thường sẽ làm cho khách hàng chuyển đổi POST thành yêu cầu GET.

+7

Câu trả lời này hoàn hảo! Mô-đun Python 2.6 urllib2 chuyển từ POST sang GET trên chuyển hướng. Điều này xảy ra không chỉ với dấu gạch chéo ở phía trước, mà còn có thể xảy ra đối với các trường hợp khi http được chuyển hướng đến https. – Hazok

+2

Bạn không làm gì cả. – oneloop

Các vấn đề liên quan