我有一个C#windows应用程序(.Net 3.0 Framework),它使用PHP Web服务调用HttpWebRequest.
在Win 7和Vista中,如果通过非SSL(即http://)进行调用,则代码可以正常工作.当呼叫被更改为调用链接的SSL(https :)版本时,它会超时HttpWebRequest.GetRequestStream().每次都会发生这种情况
当在Windows XP计算机上运行相同的应用程序时,它可以正常使用HTTP或HTTPS URL.
代码确实接受了所有服务器证书代码.另外,我添加了System.Net日志记录.它会写出日志,但因为数据包是加密的,除了Timeout abort语句之外你真的看不到多少.
我也尝试过Fiddler,但再加上加密数据包,我看不太多.顺便说一句,当我尝试使用Fiddler2解密应用程序挂起时,这样就没有成功.
无论如何,任何帮助将不胜感激.谢谢.
我会加:
嗨,我正在尝试使用WebRequest设置用户代理,但不幸的是我只是使用HttpWebRequest找到了如何做到这一点,所以这里是我的代码,我希望你能帮助我使用WebRequest设置用户代理.
这是我的代码
public string Post(string url, string Post, string Header, string Value)
{
string str_ReturnValue = "";
WebRequest request = WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
request.Timeout = 1000000;
if (Header != null & Value != null)
{
request.Headers.Add(Header, Value);
}
using (Stream s = request.GetRequestStream())
{
using (StreamWriter sw = new StreamWriter(s))
sw.Write(Post);
}
using (Stream s = request.GetResponse().GetResponseStream())
{
using (StreamReader sr = new StreamReader(s))
{
var jsonData = sr.ReadToEnd();
str_ReturnValue += jsonData.ToString();
}
}
return str_ReturnValue; …Run Code Online (Sandbox Code Playgroud) 我使用WebBrowser登录网站,然后我想使用正则表达式获取一些数据,但webRequest没有使用web Browse cookie,
我的webBrowser是公开的,有没有办法在webRequest中使用WebBrowser cookie?
这可能是一个非常简单的问题,但我似乎无法格式化web webrequest /响应以从Wikipedia API获取数据.我已经在下面发布了我的代码,如果有人可以帮我看看我的问题.
string pgTitle = txtPageTitle.Text;
Uri address = new Uri("http://en.wikipedia.org/w/api.php");
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string action = "query";
string query = pgTitle;
StringBuilder data = new StringBuilder();
data.Append("action=" + HttpUtility.UrlEncode(action));
data.Append("&query=" + HttpUtility.UrlEncode(query));
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream.
StreamReader reader = new …Run Code Online (Sandbox Code Playgroud) 我在防火墙后面要求我在让我访问互联网之前输入凭据.因此,我的第一个http请求被截获,然后被重定向到一个安全服务器,提示我输入我的凭据,但是服务器证书无效,因此,我的request.getResponse失败并显示异常消息:"底层连接已关闭.不建立SSL/TL安全通道的信任关系"
WebRequest googleRequest = WebRequest.Create("http://74.125.67.100");
try {WebResponse response = googleRequest.GetResponse();}
catch(WebException ex){System.Console.WriteLine("ex.message");}
Run Code Online (Sandbox Code Playgroud)
实际上我想要的是获取重定向我的响应的Location标头,以便我可以与具有无效证书的服务器建立ssl连接.我会感激你的建议.
我正在尝试自动下载一些pdf文件,给出一个网址列表.
这是我的代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
var encoding = new UTF8Encoding();
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-gb,en;q=0.5");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
BinaryReader reader = new BinaryReader(resp.GetResponseStream());
FileStream stream = new FileStream("output/" + date.ToString("yyyy-MM-dd") + ".pdf",FileMode.Create);
BinaryWriter writer = new BinaryWriter(stream);
while (reader.PeekChar() != -1)
{
writer.Write(reader.Read());
}
writer.Flush();
writer.Close();
Run Code Online (Sandbox Code Playgroud)
所以,我知道第一部分有效.我最初得到它并使用TextReader读取它 - 但这给了我损坏的pdf文件(因为pdfs是二进制文件).
现在,如果我运行它,reader.PeekChar()总是-1并且没有任何反应 - 我得到一个空文件.
在调试它时,我注意到reader.Read()实际上在我调用时给出了不同的数字 - 所以也许Peek被打破了.
所以我尝试了一些很脏的东西
try
{
while (true)
{
writer.Write(reader.Read()); …Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法知道服务器是否支持简历下载功能,如果支持,如何发送恢复请求?
我正在寻找一个解决方案,我的ASP.NET页面可以从服务器下载到我的,像今天的" rapidleech "这样的东西,但我想检查我请求下载的服务器是否支持恢复功能.
所以我正试图将一些东西发布到网络服务器上.
System.Net.HttpWebRequest EventReq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("url");
System.String Content = "id=" + Id;
EventReq.ContentLength = System.Text.Encoding.UTF8.GetByteCount(Content);
EventReq.Method = "POST";
EventReq.ContentType = "application/x-www-form-urlencoded";
System.IO.StreamWriter sw = new System.IO.StreamWriter(EventReq.GetRequestStream(), System.Text.Encoding.UTF8);
sw.Write(Content);
sw.Flush();
sw.Close();
Run Code Online (Sandbox Code Playgroud)
看起来没问题,我根据ENCODED数据的大小设置内容长度...无论如何,它在sw.flush()失败,"要写入流的字节超过指定的内容长度大小"
StreamWriter在我背后做了一些魔法,我不知道吗?有没有办法让我了解StreamWriter正在做什么?
我有一个winforms应用程序,我一直在努力对消费者帐户进行多项测试.测试需要一次登录才能执行.
string paramaters = "authmethod=on&chkRememberMe=on&login-form-type=pwd&password=" + pw.Text + "&userid=" + uid.Text + "&username=" + uid.Text;
string strResponse;
HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("https://www.url.com/login.form");
requestLogin.Method = "POST";
requestLogin.CookieContainer = cookieJar;
requestLogin.ContentType = "application/x-www-form-urlencoded";
requestLogin.ContentLength = paramaters.Length;
StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(paramaters);
stOut.Close();
StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close();
Run Code Online (Sandbox Code Playgroud)
这个脚本适用于登录就好了,问题是当我需要实际运行测试时我需要将所有结果都返回到一个字符串中(HTML结果).
private string runTestRequest(Uri url, string parameters)
{
string testResults = string.Empty;
HttpWebRequest runTest = (HttpWebRequest)WebRequest.Create(url);
runTest.CookieContainer = cookieJar;
runTest.Method = "POST";
runTest.ContentType = "application/x-www-form-urlencoded";
StreamWriter stOut = new StreamWriter(runTest.GetRequestStream(), …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过基本身份验证的https网址进行webrequest.而它不工作!下面是我的代码,它实际上工作,如果我使用非安全网址与安全网址,我无法弄清楚我做错了什么.工作只是找到非安全,但当使用安全网址时,我得到401用户身份验证错误.是否有人在服务器上设置错误,或者是我的代码?
有人能帮助我吗?
var req = System.Net.HttpWebRequest.Create(Url) as HttpWebRequest;
req.Method = Method.ToString();
req.ContentType = "application/json";
req.Date = RequestTime;
req.Proxy = null;
string credentials = String.Format("{0}:{1}", "xxxx", "xxxx");
byte[] bytes = Encoding.ASCII.GetBytes(credentials);
string base64 = Convert.ToBase64String(bytes);
string authorization = String.Concat("Basic ", base64);
req.Headers.Add("Authorization", authorization);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
string responsebody = readStream.ReadToEnd();
Console.WriteLine(responsebody);
response.Close();
readStream.Close();
Run Code Online (Sandbox Code Playgroud) c# ×10
webrequest ×10
asp.net ×1
binaryreader ×1
browser ×1
cookies ×1
https ×1
mediawiki ×1
pdf ×1
streamwriter ×1
web-services ×1
wikipedia ×1
windows-7 ×1
winforms ×1