C# 用WebRequest的访问post发送到远程url时怎么远程url读取不到cookies
C# 用WebRequest的访问post发送到远程url时怎么远程url读取不到cookies
如果直接访问远程url是ok的,如果用a页面在C#里post到远程url时,就有问题了,读取不到cookies,致使程序没办法用
请问手帮忙。。
a页面主要代码:
private static string CallWebPage(string url, string postDataStr, Encoding Encod)
{
string rStr = "";
System.Net.WebRequest req = null;
System.Net.WebResponse resp = null;
System.IO.Stream os = null;
System.IO.StreamReader sr = null;
try
{
//创建连接
req = System.Net.WebRequest.Create(url);
//设置访问方式和发送的请求数据的内容类型
if (string.IsNullOrEmpty(postDataStr))
{
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "GET";
}
else
{
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
if (Encod == null)
{
Encod = System.Text.Encoding.Default;
}
byte[] bytes = Encod.GetBytes(postDataStr);
req.ContentLength = bytes.Length;
os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
}
//读取返回结果
resp = req.GetResponse();
sr = new System.IO.StreamReader(resp.GetResponseStream(), System.Text.Encoding.Default);
rStr = sr.ReadToEnd();
}
catch (Exception ex1)
{
//LogUtil.Warn("HttpUtil.CallWebPage 异常:" + ex1.Message);
}
finally
{
try
{
//关闭资源
if (os != null)
{
os.Dispose();
os.Close();
}
if (sr != null)
{
sr.Dispose();
sr.Close();
}
if (resp != null)
{
resp.Close();
}
if (req != null) req = null;
}
catch (Exception ex2)
{
//LogUtil.Exception("HttpUtil.CallWebPage 关闭连接异常:" + ex2.Message);
}
}
return rStr;
}
调用代码:string r = CallWebPage("http://xx.com/count.aspx", "username=2222222222",null);
b页面主页代码:
string guid = HttpContext.Current.Request.Cookies["guid"] == null ? "" : HttpContext.Current.Request.Cookies["guid"].Value;
if (!string.IsNullOrEmpty(guid))
{
string username = Request.QueryString["username"];
new Count_DAL().AddUserInfo(username);
Response.Write("1:成功");
}
else
{
Response.Write("2:失败,无guid的Cookies");
return;
}
直接http://xx.com/count.aspx?username=2222222222时,执行都是成功的,返回的是1
用a页面post或get调用的方式,老是返回的2,就是失败,真正原因,就是通过这种方式好像在b页面得不到cookies,所以只能返回2,我在网上搜了好多方法,都是返回的2,都不支持b页的获得本来应该有的cookies,请高手指点
[解决办法]
希望下面的代码对你有用
private System.Net.CookieContainer GetCookie()
{
HttpWebRequest req;
HttpWebResponse result;
object cookies = new System.Net.CookieContainer();
req = WebRequest.Create("http://...");
req.CookieContainer = cookies;
result = req.GetResponse();
req.Abort();
return cookies;
}
private void Parse1()
{
HttpWebRequest req;
System.IO.StreamWriter reqStreamWriter;
HttpWebResponse result;
Stream strReceiveStream;
string strResult;
StreamReader sr;
System.Net.CookieContainer cookies;
cookies = GetCookie();
req = WebRequest.Create("http://...");
req.CookieContainer = cookies;
result = req.GetResponse();
if (result.StatusCode == HttpStatusCode.OK) {
strReceiveStream = result.GetResponseStream();
sr = new StreamReader(strReceiveStream);
strResult = sr.ReadToEnd();
Console.WriteLine(strResult);
} else {
Console.WriteLine("ERROR");
}
strReceiveStream.Close();
req.Abort();
sr.Close();
}