2017-08-15 19 views
0

POSTリクエストをchromedriverサーバーに送信しようとしています。ソケットを使用して生のPOSTリクエストを送信

ここ

私はnew sessionを開始しようとするものである:

import socket 

s = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM) 

s.connect(("127.0.0.1", 9515)) 

s.send(b'POST /session HTTP/1.1\r\nContent-Type:application/json\r\n{"capabilities": {}, "desiredCapabilities": {}}\r\n\r\n') 
response = s.recv(4096) 
print(response) 

は出力:エラーの

b'HTTP/1.1 200 OK\r\nContent-Length:270\r\nContent-Type:application/json; charset=utf-8\r\nConnection:close\r\n\r\n{"sessionId":"b26166c2aac022566917db20260500bb","status":33,"value":{"message":"session not created exception: Missing or invalid capabilities\\n (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 4.4.0-91-generic x86_64)"}}' 

概要:

I私が送りますjsonオブジェクトが正しく解析取得されていません同じjsonオブジェクトを使用しますが、requestsライブラリで送信してください。すべて正常です:

import requests 

params = { 
     'capabilities': {}, 
     'desiredCapabilities': {} 
    } 


headers = {'Content-type': 'application/json'} 

URL = "http://127.0.0.1:9515" 

r = requests.post(URL + "/session", json=params) 

print("Status: " + str(r.status_code)) 
print("Body: " + str(r.content)) 

出力:

Status: 200 
Body: b'{"sessionId":"e03189a25d099125a541f3044cb0ee42","status":0,"value":{"acceptSslCerts":true,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"browserName":"chrome","chrome":{"chromedriverVersion":"2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8)","userDataDir":"/tmp/.org.chromium.Chromium.LBeQkw"},"cssSelectorsEnabled":true,"databaseEnabled":false,"handlesAlerts":true,"hasTouchScreen":false,"javascriptEnabled":true,"locationContextEnabled":true,"mobileEmulationEnabled":false,"nativeEvents":true,"networkConnectionEnabled":false,"pageLoadStrategy":"normal","platform":"Linux","rotatable":false,"setWindowRect":true,"takesHeapSnapshot":true,"takesScreenshot":true,"unexpectedAlertBehaviour":"","version":"60.0.3112.90","webStorageEnabled":true}}' 

出力の概要:jsonオブジェクトがchromedrivernew sessionで正常に解析されたが

を作成された生POSTリクエストを送信し、なぜあなたは、人は、アイデアを持っていますかsocketを使用して期待どおりに動作していないですか?

+0

まあのように見える、あなたはPOSTで「コンテンツ」をスペルミス。 –

+0

こんにちは@JamesKPolk私はそれを修正、申し訳ありません。それでも同じように行動している。 – CuriousGuy

+0

'要求 'が実際に送信してソケットで再利用するものを記録することができます:https://stackoverflow.com/questions/10588644/how-can-i-see-the-entire-http-request-thats-being-sent- by-my-python-application – Vovanrock2002

答えて

2

あなたのHTTPリクエストに関するいくつかの問題があります。

  • は、HTTPリクエストのボディが\r\n\r\nによってヘッドから分離されなければなりません。
  • Content-Lengthフィールドが必要です。そうしないと、リモートホストは身体がいつ完了したかを知りません。
  • Hostフィールドは、HTTP 1.1では必須です。 (あなたが最初のリクエストで200を受けているため、サーバーはおそらく主張しません。)

私が使用して(Apacheウェブサーバで)動作するようにあなたの例を持っている:

s.send(b'POST /session HTTP/1.1\r\nHost: 127.0.0.1:9515\r\nContent-Type: application/json\r\nContent-Length: 47\r\n\r\n{"capabilities": {}, "desiredCapabilities": {}}') 

へ視覚的に、より明確にする、有効なHTTP要求が

POST /session HTTP/1.1 
Host: 127.0.0.1:9515 
Content-Type: application/json 
Content-Length: 47 

{"capabilities": {}, "desiredCapabilities": {}} 
関連する問題