2014-08-30 57 views
9

我試圖使用cgminer的API使用Python。我對使用requests庫特別感興趣。在請求中設置端口

我明白如何在requests中做基本的事情,但cgminer想要更具體些。我想縮小

import socket 
import json 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect(('localhost', 4028)) 

sock.send(json.dumps({'command': 'summary'})) 

改爲使用requests

如何指定使用該庫的端口,以及如何發送這樣的json請求並等待將響應存儲在變量中?

+0

我不確定理解。這就是爲什麼我發表評論:[請求](http://docs.python-requests.org/en/latest/)是一個HTTP庫。您可以在URL http://example.com:4028/...中指定端口。從我可以匆匆閱讀的內容(這裏)(https:// github。com/ckolivas/cgminer/blob/master/API-README)'cgminer'提供了一個RPC API。但它提供了一個HTTP接口嗎? – 2014-08-30 13:40:57

+0

也許就是這個問題。謝謝你的幫助。 – 2mac 2014-08-30 13:52:42

+0

我已重新張貼爲答案,因爲您似乎確認了我的設想。 – 2014-08-30 13:59:18

回答

0

您可以使用冒號指定請求的端口,就像在瀏覽器中一樣,如 r = requests.get('http://localhost:4028')。這會阻止,直到收到響應,或者直到請求超時,所以你不必擔心等待響應。

可以使用requests.post method with the data parameter,例如發送JSON數據作爲POST請求作爲

import json, requests 
payload = {'command': 'summary'} 
r = requests.post('http://localhost:4028', data=json.dumps(payload)) 

訪問響應然後可以用r.textr.json()

請注意,請求是一個HTTP庫 - 如果它不是HTTP,那麼我不認爲有可能使用請求。

3

正如有人誰也學到了一些蟒蛇的網絡硬盤的方式常見的缺陷,我加入這個答案要強調的一個重要但很容易混亂安裝點左右的requests.get()1 ARG :

localhost是您的計算機解析爲其自己的回送適配器的IP地址127.0.0.1的別名。 foo.com也是一個別名,只是一個遠離主機而解決的問題。

requests.get('foo.com:4028')    #<--fails 
requests.get('http://foo.com:4028')   #<--works usually 
requests.get('http:///www.foo.com:4028') #<--works almost always 

&爲迴環:

requests.get('http://127.0.0.1:4028')  #<--works 
requests.get('http://localhost:4028')  #<--works 

這一要求import socket &爲您提供您的主機的本地IP(又名自己的局域網內您的地址);它比主叫號碼localhost稍微遠一點,但不是所有的出口到開放互聯網:

requests.get('http://{}:4028'.format(socket.gethostbyname(socket.gethostname()))) #<--works 
+1

'localhost'的'172.0.0.1'不正確。它是'127.0.0.1'。錯字,或者這就是爲什麼它失敗了? – 2mac 2017-04-09 00:22:36