
























【Red_angelX】:
自己看HttpWebRequest就可以了
【lovepp2004】:
呵呵。无图片验证无所谓。我想看看怎么实现。呵呵
【tl_pear】:
学习
【zhangliu_521】:
Red_angelX(八戒) 说得对.
各个网站也不一样 很难做到通用
看HttpWebRequest
POST数据
用单独的网站做练习.先搞定一个再说
【mudong303】:
这个东西我做过 就是 HttpWebRequest 很简单 就是设置下head 用post到指定地址就可以啦
不过cookie是个难点,取得图片和取得首页 到登陆完成 cookie要维持,还有不同的网站,登陆前后获取cookie和cookie个数都有所不同
【lovepp2004】:
呵呵。有代码的发奥。我也先去看看httpwebrequest了。哈哈
【zhangliu_521】:
tring url = "http://my.b2b.hc360.com/my/turbine/template/firstview,other_login.html";
string indata = @"LoginID=mytestcs&Passwd=aabbccdd&LoginChk=true&Submit=%B5%C7%A1%A1%A1%A1%C2%BC";
string outdata="";
CookieContainer myCookieContainer=new CookieContainer();
//新建一个CookieContainer来存放Cookie集合
HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);
//新建一个HttpWebRequest
myHttpWebRequest.ContentType="application/x-www-form-urlencoded";
myHttpWebRequest.ContentLength=indata.Length;
myHttpWebRequest.Method="POST";
myHttpWebRequest.CookieContainer=myCookieContainer;
//设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer
Stream myRequestStream=myHttpWebRequest.GetRequestStream();
StreamWriter myStreamWriter=new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));
myStreamWriter.Write(indata);
//把数据写入HttpWebRequest的Request流
myStreamWriter.Close();
myRequestStream.Close();
//关闭打开对象
HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
//新建一个HttpWebResponse
myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
//获取一个包含url的Cookie集合的CookieCollection
Stream myResponseStream=myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312"));
outdata=myStreamReader.ReadToEnd();
//把数据从HttpWebResponse的Response流中读出
myStreamReader.Close();
myResponseStream.Close();
Console.WriteLine(outdata);
//显示"登录"
//拿到了Cookie,再进行请求就能直接读取到登录后的内容了
myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);
myHttpWebRequest.CookieContainer=myCookieContainer;//*
//刚才那个CookieContainer已经存有了Cookie,把它附加到HttpWebRequest中则能直接通过验证
myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
myResponseStream=myHttpWebResponse.GetResponseStream();
myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312"));
outdata=myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
Console.WriteLine(outdata);
【zhangliu_521】:
如何给网页Post数据
///////////////////////////////////////////////////////////////////////////
//SDK post
///////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{
//I create C:\Inetpub\wwwroot\test\test.asp ,start the web service
//start my program, the result is OK.
//If it works,it is written by masterz,otherwise I don't know who write it.
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name="127.0.0.1";
char* req="POST /test/test.asp HTTP/1.0\r\n"
"From: local\r\n"
"User-Agent: post_test/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 20\r\n\r\n"
"type=12345&name=aaaa";
if(WSAStartup(winsock_version,&wsadata))
printf("can't initial socket");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
// Use def. now, need to handle general case
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return;
}
else
printf("connected with %s\n",host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket);
}
else
printf("send() OK\n");
char dest[1000];
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
}
void post()
{
CInternetSession session("My Session");
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
CString ServerName = "webmail.21cn.com";
INTERNET_PORT nPort = 80;
DWORD retcode;
char outBuff[300] = "LoginName=aaa&passwd=xxx&DomainName=21cn.com";//I have test this with my loginname and password
try
{
pServer = session.GetHttpConnection(ServerName,nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/NULL/NULL/NULL/NULL/NULL/SignIn.gen",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
pFile -> AddRequestHeaders("Accept: */*");
pFile -> SendRequest(NULL,0,outBuff,strlen(outBuff)+1);
pFile -> QueryInfoStatusCode(retcode);
// you can read from the file after this......I've just left it out.
for(int i=0;i<10;i++)//read ten line of returned HTML,you need to edit this to use the result
{
CString smsg;
pFile->ReadString(smsg);
AfxMessageBox(smsg);
}
DWORD dwlen=pFile->GetLength();
char buf[1024];
DWORD dwread=pFile->Read(buf,1024);
}
catch (CInternetException * e){};
delete pFile;
delete pServer;
session.Close();
}
【zhangliu_521】:
这个是提交的数据类:
using System.Collections;
using System.IO;
public class RequestData
{
ArrayList arr=new ArrayList();
public RequestData()
{
}
public string GetData()
{
string r="";
for(int i=0;i<arr.Count;i++)
{
data d=(data)arr[i];
if(r.Length>0)r+="&";
r+=d.Field+"="+d.Value;
}
return r;
}
public void AddField(string Field,string Value)
{
data a=new data();
a.Field=Field;
a.Value=Value;
arr.Add(a);
}
struct data
{
public string Field,Value;
}
}
可以参考
【seemon】:
呵呵,都不用c#,直接用javascript就可以了
自己做一个form把要填的内容在form里初始化好,把action设置成目标地址,不停的submit就可以了
【Red_angelX】:
private string GetUrlContext(string curl)
{
string text = "";
if (this.method == 1) //Get
{
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(new Uri(curl));
ServicePointManager.Expect100Continue = false;
HttpWebResponse response = null;
if (Form1.C_IsProxyOn)
{
WebProxy proxy = new WebProxy();
proxy = (WebProxy) request.Proxy;
string uriString = Form1.C_Proxy_addr + ":" + Form1.C_Proxy_port;
if (uriString.Length > 0)
{
Uri uri = new Uri(uriString);
proxy.Address = uri;
proxy.Credentials = new NetworkCredential(Form1.C_Proxy_user, Form1.C_Proxy_pass);
request.Proxy = proxy;
}
}
try
{
response = (HttpWebResponse) request.GetResponse();
}
catch (WebException exception)
{
if (exception.Status == WebExceptionStatus.ProtocolError)
{
response = (HttpWebResponse) exception.Response;
}
else if (exception.Status == WebExceptionStatus.ConnectFailure)
{
MessageBox.Show("\u8fde\u63a5\u670d\u52a1\u5668\u5931\u8d25,\u8bf7\u68c0\u67e5\u7f51\u7edc", "\u9519\u8bef");
}
else
{
MessageBox.Show(exception.ToString());
}
}
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream, Encoding.Default);
text = reader.ReadToEnd();
responseStream.Close();
response.Close();
reader.Close();
return text;
}
//Post
string[] textArray = new string[2];
textArray = curl.Split(new char[] { '?' });
HttpWebRequest request2 = (HttpWebRequest) WebRequest.Create(new Uri(textArray[0]));
ServicePointManager.Expect100Continue = false;
request2.Method = "POST";
CookieContainer container = new CookieContainer();
request2.CookieContainer = container;
string s = textArray[1];
byte[] bytes = new ASCIIEncoding().GetBytes(s);
request2.ContentType = "application/x-www-form-urlencoded";
request2.ContentLength = s.Length;
Stream requestStream = request2.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
if (Form1.C_IsProxyOn)
{
WebProxy proxy = new WebProxy();
proxy = (WebProxy) request2.Proxy;
string uriString = Form1.C_Proxy_addr + ":" + Form1.C_Proxy_port;
if (uriString.Length > 0)
{
Uri uri2 = new Uri(uriString);
proxy.Address = uri2;
proxy.Credentials = new NetworkCredential(Form1.C_Proxy_user, Form1.C_Proxy_pass);
request2.Proxy = proxy;
}
}
HttpWebResponse response = null;
try
{
response = (HttpWebResponse) request2.GetResponse();
}
catch (WebException exception2)
{
if (exception2.Status == WebExceptionStatus.ProtocolError)
{
response = (HttpWebResponse) exception2.Response;
}
else if (exception2.Status == WebExceptionStatus.ConnectFailure)
{
MessageBox.Show("\u8fde\u63a5\u670d\u52a1\u5668\u5931\u8d25,\u8bf7\u68c0\u67e5\u7f51\u7edc", "\u9519\u8bef");
}
else
{
MessageBox.Show(exception2.ToString());
}
}
response.Cookies = request2.CookieContainer.GetCookies(request2.RequestUri);
Stream stream = response.GetResponseStream();
StreamReader reader2 = new StreamReader(stream, Encoding.Default);
text = reader2.ReadToEnd();
stream.Close();
response.Close();
reader2.Close();
return text;
}
【lovepp2004】:
谢谢大家了。今天学习了不少。呵呵。散分~
【superliyubo】:
mark~~~~
【Fooo】:
mark~~~~
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。