Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从Tor中继后面执行http请求_Python 3.x_Python Requests_Tor - Fatal编程技术网

Python 3.x 从Tor中继后面执行http请求

Python 3.x 从Tor中继后面执行http请求,python-3.x,python-requests,tor,Python 3.x,Python Requests,Tor,我正在尝试在tor中继后面生成http请求表单。我有一个小脚本,可以登录并从如下页面获取数据: import requests def requestAccountData(accountName, accountPass): print("requesting data") credentials = {'loginname': accountName, 'loginpassword': accountPass} s = requests.Session()

我正在尝试在tor中继后面生成http请求表单。我有一个小脚本,可以登录并从如下页面获取数据:

import requests

def requestAccountData(accountName, accountPass):
    print("requesting data")
    credentials = {'loginname': accountName, 'loginpassword': accountPass}

    s = requests.Session()
    s.post('https://example.com/account/', data=credentials)

    button = { 'page': 'statistics' }
    r = s.post('https://example.com/account/', data=button)

    return r.text

#print(requestAccountData("*****", "*****"))
如果单独运行上述代码,则返回一个页面内容字符串。但是如果我在下面的查询函数中调用它(一直遵循俄罗斯教程),我会得到一个错误

import socket
import socks  # SocksiPy module
import stem.process
from stem.util import term
from requestAccountData import requestAccountData

SOCKS_PORT = 7000

# Set socks proxy and wrap the urllib module

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket()

# Perform DNS resolution through the socket

def getaddrinfo(*args):
    return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]

socket.getaddrinfo = getaddrinfo

def query(url):
    """
    Uses requests to fetch a site using SocksiPy for Tor over the SOCKS_PORT.
    """

    r = requestAccountData("*****", "*****")
    print(r)

    try:
        return r
    except:
        return "Unable to reach %s" % url

# Start an instance of Tor configured to only exit through Russia. This prints
# Tor's bootstrap information as it starts. Note that this likely will not
# work if you have another Tor instance running.

def print_bootstrap_lines(line):
    if "Bootstrapped " in line:
        print(line)


print(term.format("Starting Tor:\n", term.Attr.BOLD))

tor_process = stem.process.launch_tor_with_config(
  config = {
    'SocksPort': str(SOCKS_PORT),
    'ExitNodes': '{ru}',
  },
  init_msg_handler = print_bootstrap_lines,
)

print("Checking our endpoint:")
print(query("https://www.atagar.com/echo.php"))

tor_process.kill()  # stops tor
调用
requestAccountData(“*******”,“*******”)
时我遇到的错误是:

Traceback (most recent call last):
  File "C:\Users\gatsu\My Documents\LiClipse Workspace\TorCommunicator\Communicator.py", line 56, in <module>
    print(query("https://www.atagar.com/echo.php"))
  File "C:\Users\gatsu\My Documents\LiClipse Workspace\TorCommunicator\Communicator.py", line 26, in query
    r = requestAccountData("*****", "*****")
  File "C:\Users\gatsu\My Documents\LiClipse Workspace\TorCommunicator\requestAccountData.py", line 8, in requestAccountData
    s.post('https://example.com/account/', data=credentials)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\sessions.py", line 508, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\adapters.py", line 370, in send
    timeout=timeout
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 544, in urlopen
    body=body, headers=headers)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 341, in _make_request
    self._validate_conn(conn)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 762, in _validate_conn
    conn.connect()
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connection.py", line 204, in connect
    conn = self._new_conn()
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connection.py", line 134, in _new_conn
    (self.host, self.port), self.timeout, **extra_kw)
  File "C:\Python34\lib\site-packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\util\connection.py", line 68, in create_connection
    sock = socket.socket(af, socktype, proto)
TypeError: 'socksocket' object is not callable
回溯(最近一次呼叫最后一次):
文件“C:\Users\gatsu\My Documents\LiClipse Workspace\TorCommunicator\Communicator.py”,第56行,在
打印(查询)https://www.atagar.com/echo.php"))
文件“C:\Users\gatsu\My Documents\LiClipse Workspace\TorCommunicator\Communicator.py”,第26行,在查询中
r=requestAccountData(“****”,“****”)
文件“C:\Users\gatsu\My Documents\LiClipse Workspace\TorCommunicator\requestAccountData.py”,第8行,在requestAccountData中
s、 邮政('https://example.com/account/,数据=凭据)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\sessions.py”,第508行,在post中
return self.request('POST',url,data=data,json=json,**kwargs)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\sessions.py”,请求中第465行
resp=自我发送(准备,**发送)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\sessions.py”,第573行,在send中
r=适配器.send(请求,**kwargs)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\adapters.py”,第370行,在send中
超时=超时
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\packages\urlib3\connectionpool.py”,第544行,在urlopen中
正文=正文,标题=标题)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connectionpool.py”,第341行,在请求中
自我验证连接(连接)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\packages\urlib3\connectionpool.py”,第762行,位于\u validate\u conn
连接
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connection.py”,第204行,在connect中
conn=自我。_new_conn()
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\connection.py”,第134行,位于康涅狄格州新州
(self.host、self.port)、self.timeout、**额外功率)
文件“C:\Python34\lib\site packages\requests-2.6.0-py3.4.egg\requests\packages\urllib3\util\connection.py”,第68行,在create\u connection中
sock=socket.socket(af,socktype,proto)
TypeError:“socksocket”对象不可调用

我无法理解错误是什么。

首先,新的SocksiPy模块作为
PySocks
python包提供,它将涵盖许多问题

此示例使用
Monkeypatching
,其中整个标准库使用一个默认代理:

import socket
import socks
socks.set_default_proxy(socks.SOCKS5, "localhost")
socket.socket = socks.socksocket
因此,当您尝试执行
socket.socket=socks.socksocket()
时,会引发错误-
TypeError:“socksocket”对象不可调用
。尽管如此,
请求
在Tor之后运行良好。

谢谢,我安装了PySocks()并使用了
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,'127.0.0.1',socks_PORT)
socket.socket=socks.socksket
,效果非常好。