centos privoxy?centos配置

今天给各位分享centos privoxy的知识,其中也会对centos配置进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

PHP Curl出现403错误怎么办

使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问googlebaidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果设置为不使用proxy则都能正常访问。

难道googlebaidu就不让用proxy连接么?显然不可能,所以打开curl的信息输出(curl_setopt($this->mSh,CURLOPT_VERBOSE,1);)看看,得到以下结果:

.代码如下:

*Trying127.0.0.1...*connected

*Connectedto127.0.0.1(127.0.0.1)port8118(#0)

*EstablishHTTPproxytunneltowww.baidu.com:80

>CONNECTwww.baidu.com:80HTTP/1.0

Host:www.baidu.com:80

User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)

Proxy-Connection:Keep-Alive

<HTTP/1.0403Connectionnotallowable

<X-Hint:Ifyoureadthismessageinteractively,thenyouknowwhythishappens,-)

<

*TherequestedURLreturnederror:403

*ReceivedHTTPcode403fromproxyafterCONNECT

*Closingconnection#0

...Failed.

可以看到proxy服务器工作正常,的确是baidu返回了403错误,但原因肯定还在我这边。终于,从网上(1of2,2of2)得到了点启发──我使用的是proxytunnel而非proxy。

在代码中,有这么一句:

.代码如下:

curl_setopt($this->mSh,CURLOPT_HTTPPROXYTUNNEL,true);

curl_setopt($this->mSh,CURLOPT_PROXY,$phost);

php文档中没有详细说明,不过mancurl中有详细解释,两者都是代理,proxytunnel(-p参数)允许其他协议通过http代理传输,而proxy(-x参数)则只能走http协议。所以我猜测,googlebaidu的服务器和curl的proxytunnel不和,所以返回403。

禁用掉上面2行代码的第一句后,curl访问恢复正常。

比较奇怪的是,几种操作系统下还不一样,一台MACOSX就要显式的禁用proxytunnel才可以,curl版本:

.代码如下:

$curl--version

curl7.16.3(powerpc-apple-darwin9.0)libcurl/7.16.3OpenSSL/0.9.7lzlib/1.2.3

Protocols:tftpftptelnetdictldaphttpfilehttpsftps

Features:GSS-NegotiateIPv6LargefileNTLMSSLlibz

而另外一台ubuntu则完全不受影响,怎么都能用,curl版本:

.代码如下:

$curl--version

curl7.18.2(i486-pc-linux-gnu)libcurl/7.18.2OpenSSL/0.9.8gzlib/1.2.3.3libidn/1.10

Protocols:tftpftptelnetdictldapldapshttpfilehttpsftps

Features:GSS-NegotiateIDNIPv6LargefileNTLMSSLlibz

MT主机上的centos也没事,curl版本:

.代码如下:

$curl--version

curl7.15.5(i686-redhat-linux-gnu)libcurl/7.15.5OpenSSL/0.9.8bzlib/1.2.3libidn/0.6.5

Protocols:tftpftptelnetdictldaphttpfilehttpsftps

Features:GSS-NegotiateIDNIPv6LargefileNTLMSSLlibz

看来不完全是curl版本问题,MACOSX的确与众不同啊。

还有一个原因也会导致curl返回403错误,如果设置了:

.代码如下:

curl_setopt($ch,CURLOPT_NOBODY,true);

则需要紧跟着设置:

.代码如下:

curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'GET');

不然会因为http服务器不允许HEAD命令而返回403错误。参考:TroublewithacURLrequestinPHP(forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html)。MACOSX上curl之所以特殊,也不排除是这种原因

Privoxy 安装配置

使用Privoxy将socks5代理转成http代理

操作系统 CentOS 7

用yum命令看一下,是最新版本

直接安装 privoxy

配置文件位于目录:/etc/privoxy

修改绑定地址,搜索==listen-address==,修改需要绑定的IP

设置socks5转发,搜索==forward-socks5t==,去掉注释,修改对应IP

配置不走代理,直接本地转发的

由于网络不稳定,经常出现503,增加转发重试

默认值是:0

配置最大客户端的连接

默认值是:128

这个用于开启和关闭广告过滤和内容过滤,1表示开启,0表示关闭

默认值是:1

共享连接

是否保持活动的传出连接应该在不同的传入连接之间共享

拦截服务端禁止在iframe中加载的响应头,在user.action末尾添加

只能处理http的连接

修改服务端的响应头,去掉设置cookie时的 HttpOnly,让客户端可以通过js获取cookie

Privoxy使用类似Perl的 s///操作来实现对内容的替换修改

只能处理http的连接

在user.filter文件中新增

在user.action文件中新增

浏览器配置代理指向privoxy

访问地址: 可以进入到privoxy的一个管理页面

访问地址: 可以进入到一个tor检查页面

阅读剩余
THE END