Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
C# 如何通过TCP连接到http代理?_C#_Http_Tcp_Proxy_Tcpclient - Fatal编程技术网

C# 如何通过TCP连接到http代理?

C# 如何通过TCP连接到http代理?,c#,http,tcp,proxy,tcpclient,C#,Http,Tcp,Proxy,Tcpclient,我试图弄清楚代理连接是如何通过TCP工作的。我首先在远程服务器上下载并安装Squid代理 现在我正试图通过c#TcpClient连接到它 通过以下请求打开连接: CONNECT proxyjudge.iathao.com:80 HTTP/1.1 HOST proxyjudge.iathao.com 失败,错误代码为400(我尝试了几种不同的方法,总是失败): HTTP/1.0 400错误请求 服务器:squid/3.1.10 Mime版本:1.0 日期:2012年8月27日星期一13:25:

我试图弄清楚代理连接是如何通过TCP工作的。我首先在远程服务器上下载并安装Squid代理

现在我正试图通过c#TcpClient连接到它

通过以下请求打开连接:

CONNECT proxyjudge.iathao.com:80 HTTP/1.1 
HOST proxyjudge.iathao.com
失败,错误代码为400(我尝试了几种不同的方法,总是失败):

HTTP/1.0 400错误请求
服务器:squid/3.1.10
Mime版本:1.0
日期:2012年8月27日星期一13:25:54 GMT
内容类型:text/html
内容长度:3295
X-Squid-Error:错误\u无效\u请求0
改变:接受语言
内容语言:英语
X-Cache:来自的未命中****
X-Cache-Lookup:无****:***
连接:关闭
....
错误
无法检索请求的URL
....
尝试处理请求时遇到无效的请求错误:

连接proxyjudge.iathao.com:80http/1.1 主持人proxyjudge.iathao.com 一些可能的问题是:

  • 缺少或未知的请求方法

  • 缺少URL

  • 缺少HTTP标识符(HTTP/1.0)

  • 请求太大

  • POST或PUT请求缺少内容长度

  • 主机名中的非法字符;不允许使用下划线

  • HTTP/1.1 Expect:正在从HTTP/1.0软件请求功能

因此,我跟踪了firefox通过wireshark发送到同一服务器的请求,它看起来像是一个普通的get请求,看不到connect命令:

GEThttp://proxyjudge.iathao.com/ HTTP/1.1
主持人:proxyjudge.iathao.com
用户代理:Mozilla/5.0(Windows NT 6.1;WOW64;rv:13.0)Gecko/20100101 Firefox/13.0.1
接受:text/html、application/xhtml+xml、application/xml;q=0.9,*/*;q=0.8
接受语言:en-us,en;q=0.5
接受编码:gzip,deflate
DNT:1
代理连接:保持活动状态
======================================================
HTTP/1.0 200正常
日期:2012年8月27日星期一13:34:39 GMT
服务器:Apache
X-Powered-By:PHP/5.3.15
内容类型:text/html
X-Cache:来自的未命中****
X-Cache-Lookup:未命中****:****
连接:关闭
AZ环境变量1.04
HTTP_USER_AGENT=Mozilla/5.0(Windows NT 6.1;WOW64;rv:13.0)Gecko/20100101 Firefox/13.0.1
HTTP_HOST=proxyjudge.iathao.com
请求\u URI=/
HTTP\u连接=保持活动状态
远程_端口=46153
HTTP_ACCEPT_LANGUAGE=en-us,en;q=0.5
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
远程地址=****
HTTP_CACHE_CONTROL=max age=259200
HTTP_ACCEPT_ENCODING=gzip,deflate
请求\方法=获取
请求时间=1346074479
无论我读到哪里,连接都是必要的,但在这里它会导致错误。如果不需要连接,如何在受密码保护的代理上授权连接


有人能推荐一篇关于这个主题的好文章吗?

据我所知,您应该只向代理发出CONNECT命令,并获得响应。不是主机命令。如果确定,则所有其他内容都应该是用于上游服务器的合法HTTP。

您使用TcpClient而不是HttpWebRequest的具体原因是什么?在将命令字符串传递到TcpClient时,您如何格式化命令字符串?你能发布你的C代码吗?
HTTP/1.0 400 Bad Request
Server: squid/3.1.10
Mime-Version: 1.0
Date: Mon, 27 Aug 2012 13:25:54 GMT
Content-Type: text/html
Content-Length: 3295
X-Squid-Error: ERR_INVALID_REQ 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from ****
X-Cache-Lookup: NONE ****:***
Connection: close

....

<h1>ERROR</h1>
<h2>The requested URL could not be retrieved</h2>
....

<div id="content">
<p><b>Invalid Request</b> error was encountered while trying to process the request:</p>

<blockquote id="data">
<pre>CONNECT proxyjudge.iathao.com:80 HTTP/1.1 
HOST proxyjudge.iathao.com

</pre>
</blockquote>

<p>Some possible problems are:</p>
<ul>
<li><p>Missing or unknown request method.</p></li>
<li><p>Missing URL.</p></li>
<li><p>Missing HTTP Identifier (HTTP/1.0).</p></li>
<li><p>Request is too large.</p></li>
<li><p>Content-Length missing for POST or PUT requests.</p></li>
<li><p>Illegal character in hostname; underscores are not allowed.</p></li>
<li><p>HTTP/1.1 <q>Expect:</q> feature is being asked from an HTTP/1.0 software.</p></li>
</ul>
GET http://proxyjudge.iathao.com/ HTTP/1.1
Host: proxyjudge.iathao.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Proxy-Connection: keep-alive

======================================================

HTTP/1.0 200 OK
Date: Mon, 27 Aug 2012 13:34:39 GMT
Server: Apache
X-Powered-By: PHP/5.3.15
Content-Type: text/html
X-Cache: MISS from ****
X-Cache-Lookup: MISS from ****:****
Connection: close

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>AZ Environment variables 1.04</title>
</head>
<body>
<pre>
HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
HTTP_HOST = proxyjudge.iathao.com
REQUEST_URI = /
HTTP_CONNECTION = keep-alive
REMOTE_PORT = 46153
HTTP_ACCEPT_LANGUAGE = en-us,en;q=0.5
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
REMOTE_ADDR = ****
HTTP_CACHE_CONTROL = max-age=259200
HTTP_ACCEPT_ENCODING = gzip, deflate
REQUEST_METHOD = GET
REQUEST_TIME = 1346074479
</pre>
</body>
</html>