首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python创建facebook webproxy

使用python创建facebook webproxy
EN

Stack Overflow用户
提问于 2013-04-08 04:36:14
回答 1查看 397关注 0票数 0

我正在尝试创建webproxy供个人使用来访问facebook (它经常被屏蔽,因为我碰巧花了一些时间)。

从下面的代码开始:http://code.google.com/p/gevent/source/browse/examples/webproxy.py?name=1.0b2

我已经修改了它,以便使用cookie用请求替换urllib,如下所示:

代码语言:javascript
复制
def proxy_post(path, env, proxy_url, start_response):
    if '://' not in path:
        path = 'http://' + path
    try:
        #response = br.submit(path, env)
        response = requests.post(path, params = env)
        print '%s: %s' % (path, response)
        headers = [(k, v) for (k, v) in response.headers.items() if k not in drop_headers]
        scheme, netloc, path, params, query, fragment = urlparse(path)
        host = (scheme or 'http') + '://' + netloc
    except Exception, ex:
        sys.stderr.write('error while reading %s:\n' % path)
        traceback.print_exc()
        tb = traceback.format_exc()
        error_str = escape(str(ex) or ex.__class__.__name__ or 'Error')
        return ['<h1>%s</h1><h2>%s</h2><pre>%s</pre>' % (error_str, escape(path), escape(tb))]
    else:
        start_response('%s OK' % response.status_code, headers)
        data = response.content
        data = fix_links(data, proxy_url, host)
        return [data]

但是当我尝试登录时,我得到了以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gevent/wsgi.py", line 116, in handle
    self.data.extend(result)
TypeError: 'NoneType' object is not iterable
<WSGIServer fileno=3 address=0.0.0.0:8088>: Failed to handle request:
  request = <http_request "POST /https://www.facebook.com/login.php?login_attempt=1 HTTP/1.1" 127.0.0.1:56381>
  application = <function application at 0x2be2578>

127.0.0.1 - - [2013-04-13 20:08:03] "POST /https://www.facebook.com/login.php?login_attempt=1 HTTP/1.1" 500 21 "http://127.0.0.1:8088/http://www.facebook.com" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"

我的猜测是因为在创建WSGI响应时出现了一些问题,但我可以准确地找出原因。

EN

回答 1

Stack Overflow用户

发布于 2013-04-12 18:39:11

我看了一下你提到的webproxy。在def application(env, start_response):内部有以下代码:

代码语言:javascript
复制
 elif (method, path) == ('POST', ''):
    key, value = env['wsgi.input'].read().strip().split('=')
    assert key == 'url', repr(key)
    start_response('302 Found', [('Location', join(proxy_url, unquote(value)))])
elif method == 'POST':
    start_response('404 Not Found', [])

因此,如果方法为POST且路径不为空,则返回404。根据你附上的回复,你正在使用带有路径/https://www.facebook.com/login.php?login_attempt=1POST方法,我会从那里开始搜索。这可能与urllib2.open()mechanize.Browser().open()返回的结果之间的差异有一些共同之处。

附注: sth路径错误,它不应该以/https://www.facebook.com/开头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15867510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档