Zeitüberschreitung bei socket.timeout beim Verbinden mit einem Remote-Server mit web3.py

Ich verwende Web3, um eine Verbindung zu meinem Remote-Server herzustellen.

10.xxx.xxx.xxxist die IP-Adresse eines Remote-Servers.

Zuerst starte ich den Server mit diesem Befehl:parity --chain frontier.json --rpcapi="eth,net,web3,personal,web3" --rpc --rpcaddr 10.xxx.xxx.xxx --rpcport 8545 --rpccorsdomain "*" --author 0x...

Und nachdem ich ein Python-Skript ausgeführt habe:

from web3 import Web3, KeepAliveRPCProvider web3 = Web3(KeepAliveRPCProvider(host="163.xxx.xxx.xxx", port="8545")) web3.eth.coinbase

Aber ich habe diesen Fehler:ValueError: No JSON object could be decoded

Wenn ich den Host durch ersetze, 10.xxx.xxx.xxxhabe ich einen socket.timeout: timed outFehler

Außerdem, wenn ich python und web3 auf dem Remote-Server installiere und diesen Befehl ausführe:

from web3 import Web3, KeepAliveRPCProvider web3 = Web3(KeepAliveRPCProvider(host="10.xxx.xxx.xxx", port="8545")) web3.eth.syncingIch habe keinen Fehler

Aber wenn ich diesen Befehl auf einem anderen Server ausführe, habe ich den gleichen Fehler:socket.timeout: timed out

Wie kann ich diesen Fehler beheben?

Antworten (1)

Überprüfen Sie zunächst, ob die IP-Adressen in Ihren Skripts korrekt sind.

Verwenden Sie dann den Telnet-Befehl, um sicherzustellen, dass Sie vom Client-Computer aus eine Verbindung zum RPC-Port herstellen können:

 telnet 163.xxx.xxx.xxx 8545

Sie sollten eine unformatierte HTTP-Ausgabe sehen, die Ihnen einen Hinweis darauf geben sollte, was falsch sein könnte.

Wenn dies keine Verbindung herstellt, reparieren Sie das Netzwerk/die Firewall/etc. Probleme, die Sie zwischen den Computern haben.

Ja, in der Tat, wenn ich das tue telnet 163.172.151.230 8545, kann ich sehen, dass ich verbunden bin.
ValueError: No JSON object could be decodedzeigt normalerweise an, dass der Server, der im Ziel ausgeführt wird, HTML-Nutzdaten zurückgibt. Bist du sicher, dass du mit dem richtigen Geth verbunden bist? Sie können auch versuchen, einen Blick in den rohen Netzwerkverkehr und die HTTP-Antwort zu werfen, was Geth zurückgibt.
Wie kann ich überprüfen, ob ich mit dem richtigen Geth verbunden bin? Ich führe die Parität mit dem Befehl write into my post aus. Ich weiß nicht, ob es ein Problem ist, aber ich kann diesen Befehl einfach mit 10.xxx.xxx.xxxder Hexe ausführen, die die private IP-Adresse ist. Mit der 162.172.151.230Hexe ist die öffentliche IP dieser Befehl gibt mir einen Fehler.
Entschuldigung, ich meinte Parität.
Versuchen Sie, einen JSON-RPC direkt von der Befehlszeile aus zu senden, indem Sie curl. github.com/ethereum/wiki/wiki/JSON-RPC#web3_clientversion
Als ich versuchte, ` curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' 163.172.151.230:8545I've this response : Der bereitgestellte Host-Header ist nicht auf der Whitelist.`. Was bedeutet es?