![](/img/trans.png)
[英]Error when sending http POST request from C# client to python server
[英]C# application hangs during POST request to python http server
我有一個 C# 應用程序向在 Python 中創建的簡單 http 服務器發出 post 請求,但我的請求永遠不會“完成”,並且不會超過發出異步 POST 請求的進度。 這是我從我的客戶(C# 應用程序)打來的電話:
private void sendPost(HttpClientAdaptor client, MyDataObject myDataObject) {
var payload = JsonConvert.SerializeObject(myDataObject);
var content = new StringContent(payload, Encoding.UTF8, "application/json");
try {
if (client.isDisposed) {
return;
}
var response = client?.PostAsync(ApiEndpoint, content); // this hangs forever
我用python編寫的http服務器:
#!/usr/bin/env python3
"""
Very simple HTTP server in python for logging requests
Usage::
./server.py [<port>]
"""
from http.server import BaseHTTPRequestHandler, HTTPServer
import logging
from io import BytesIO
class S(BaseHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
self.send_response(200)
self.end_headers()
response = BytesIO()
response.write(b'This is POST request. ')
response.write(b'Received: ')
response.write(body)
self.wfile.write(response.getvalue())
def run(server_class=HTTPServer, handler_class=S, port=5000):
logging.basicConfig(level=logging.INFO)
server_address = ('', port)
httpd = server_class(server_address, handler_class)
logging.info('Starting httpd...\n')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
logging.info('Stopping httpd...\n')
if __name__ == '__main__':
from sys import argv
if len(argv) == 2:
run(port=int(argv[1]))
else:
run()
我知道請求正在發送到我的服務器,因為我使用了一些打印語句來打印有效負載,但我的客戶端似乎從未確認來自我的服務器的 200 響應。 我已經驗證服務器正在運行,我沒有混淆端口,並且 GET 請求通過瀏覽器工作。
我懷疑我的 python 服務器出了點問題,以至於它沒有“完成”交易,因此我的客戶沒有得到響應。
順便說一句:有沒有更簡單的方法來為我的客戶端啟動一個 http 服務器(用 C# 編寫的 Windows 應用程序)? 我只需要一種返回 200 狀態的方法。
您正在使用異步函數並且沒有等待它。
代替
var response = client?.PostAsync(ApiEndpoint, content);
嘗試
var response = await client?.PostAsync(ApiEndpoint, content);
並更改您的方法簽名
private void sendPost
至
private async Task sendPost
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.