TaskManager 를 이용 하여 2 만 개의 대리 IP 를 기어 올 라 자동 투표 기능 을 실현 하 다
10303 단어 TaskManager투표 하 다.
답:투표 사 이 트 는 IP 나 한 사용자 가 한 표 만 던 질 수 있 도록 제한 하여 악의 적 인 표 긁 기 행 위 를 방지 합 니 다.
2.하나의 IP 한 표 라면 여러 개의 IP 를 대표 하여 많은 표를 던 질 수 있 습 니까?
답:답 은 긍정 적 이다.
3.어떤 방법 으로 코드 에서 자신 이 요청 한 IP 를 바 꿀 수 있 습 니까?
응답:HTTP 요청 시 프 록 시 IP 설정
4.여러 개의 프 록 시 IP 를 어디서 얻 고 얻 은 후에 코드 자동화 투 표를 어떻게 사용 해 야 합 니까?
답:문장 뒤의 내용 을 보 세 요.
이 편 은 Task Manager 내 장 된 미 션-대리 IP 파충류 구현 디 테 일 을 소개 합 니 다.준비 해 야 할 지식:HtmlAgility Pack 해석 HTML,Quart.net.
에이전트 IP 소개
바 이 두 백과 소개:프 록 시(영어:Proxy)는 네트워크 프 록 시 라 고도 부 르 며 특수 한 네트워크 서비스 로 하나의 네트워크 단말기(일반적으로 클 라 이언 트)가 이 서 비 스 를 통 해 다른 네트워크 단말기(일반적으로 서버)와 비 직접적인 연결 을 할 수 있 도록 합 니 다.일부 게 이 트 웨 이,공유 기 등 네트워크 설 비 는 네트워크 에이전트 기능 을 갖 추고 있다.일반적으로 프 록 시 서 비 스 는 네트워크 단말기 의 프라이버시 나 안전 을 보장 하고 공격 을 방지 하 는 데 유리 하 다 고 생각한다.
현재 많은 제조 업 체 들 이 프 록 시 IP 온라인 획득 을 제공 하지만,많은 업 체 들 이 수 십 개의 테스트 를 제공 하고 있 으 며,더 많은 프 록 시 IP 를 사용 하려 면 비용 을 지불 하고 구 매해 야 한다.여기 서 저 는 많은 대리 IP 를 제공 하 는 사 이 트 를 찾 았 습 니 다.바 이 두'대리 ip'(제 가 광 고 를 한다 고 생각 하지 않도록)또는 오픈 소스 Task Manager 를 참고 하여 이 글 을 소개 할 수 있 습 니 다.
이렇게 많은 온라인 프 록 시 IP 가 있 으 면 글 의 시작 문 제 를 해결 할 수 있 습 니 다.4.그런데 문제 가 있 습 니 다.이 데 이 터 는 모두 웹 페이지 의 것 입 니 다.저 는 코드 에서 어떻게 사용 합 니까?이 는 HtmlAgility Pack 공구 꾸러미 를 사 용 했 습 니 다.이름 을 보면 HTML 을 분석 하 는 데 사 용 될 것 이 라 고 짐작 할 수 있 습 니 다.
HtmlAgilityPack 사용
HtmlAgility Pack 은 HTML 요 소 를 분석 하 는 오픈 소스 라 이브 러 리 입 니 다.가장 큰 특징 은 XPath 를 통 해 HMTL 을 분석 할 수 있 습 니 다.만약 에 C\#로 XML 을 조작 한 적 이 있다 면 HtmlAgility Pack 을 사용 하 는 것 도 편리 할 것 입 니 다.
간단 한 HTML 해석
string HTML = @"<html><head><title> </title></head><body>
<div id='div1' title='div1'>
<table>
<tr>
<td>1</td>
<td title='cn'>cn</td>
</tr>
</table>
</div>
</body></html>";
var doc = new HtmlDocument();
doc.LoadHtml(HTML);
//
Console.WriteLine(" title:"+doc.DocumentNode.SelectSingleNode("/html/head/title").InnerText);
// div1 1
HtmlNode divNode1 = doc.GetElementbyId("div1");
// div1 2
HtmlNode divNode2 = doc.DocumentNode.SelectSingleNode("//div[@id='div1']");
// 1 2
Console.WriteLine(" 1 2 :" + (divNode1 == divNode2));
// table
HtmlNodeCollection tableCollection = doc.DocumentNode.SelectNodes("//table");
Console.WriteLine(" table :"+tableCollection.Count);
// table td
HtmlNodeCollection tdCollection = tableCollection[0].SelectNodes("tr/td");
foreach (var td in tdCollection)
{
HtmlAttribute atr = td.Attributes["title"];
Console.WriteLine("td InnerText:" + td.InnerText + " | td title :" + (atr == null ? "" : atr.Value));
}
Console.Read();
돌아가다 대리 IP 파충류 실현
HtmlAgility Pack 의 간단 한 조작 을 알 게 된 후에 정식 적 으로 기어 오 르 는 과정 에 들 어 갔다.기어 오 르 는 웹 페이지 의 IP 봉쇄 기능(한 동안 요청 빈도 가 현재 IP 를 너무 높 게 봉쇄 함)때문에 디자인 과정 에서 저 는 기어 오 르 는 다섯 번 의 대리 IP 를 사용 하여 사이트 의 제한 을 돌파 했다(자신 이 나 쁜 것 을 느 꼈 다).
전체 실현 논리
.net 에서 WebRequest 를 사용 하면 HTTP 의 get Post 요청 을 모 의 할 수 있 습 니 다.마지막 으로 원 하 는 것 은 요청 할 때 사용 할 프 록 시 IP 를 설정 할 수 있 습 니 다.빨간색 코드 에 중점 을 두 고 있 습 니 다.
/// <summary>
///
/// </summary>
/// <param name="Url"></param>
/// <param name="type"></param>
/// <returns></returns>
public static string GetUrltoHtml(string Url, string type)
{
try
{
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
WebProxy myProxy = new WebProxy("192.168.15.11", 8015);
// ( , )
myProxy.Credentials = new NetworkCredential("admin", "123456");
//
wReq.Proxy = myProxy;
// Get the response instance.
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
// Dim reader As StreamReader = New StreamReader(respStream)
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))
{
return reader.ReadToEnd();
}
}
catch (System.Exception ex)
{
//errorMsg = ex.Message;
}
return "";
}
프 록 시 IP 를 어떻게 사용 하 는 지 알 고 우리 의 목표 에 한 걸음 더 가 까 워 졌 습 니 다.다음은 프 록 시 IP 획득 의 실현 입 니 다.코드 가 좀 많 기 때문에 저 는 중요 한 부분 만 붙 였 습 니 다.IpProxyGet.cs 소스 코드 는 글 의 끝 에 가서 스스로 다운로드 할 수 있 습 니 다.
/// <summary>
///
/// </summary>
/// <returns> </returns>
private static int GetTotalPage(string IPURL, string ProxyIp)
{
var doc = new HtmlDocument();
doc.LoadHtml(GetHTML(IPURL, ProxyIp));
var res = doc.DocumentNode.SelectNodes(@"//div[@class='pagination']/a");
if (res != null && res.Count > 2)
{
int page;
if (int.TryParse(res[res.Count - 2].InnerText, out page))
{
return page;
}
}
return 1;
}
각 페이지 HTML 데이터 분석
/// <summary>
///
/// </summary>
/// <param name="param"></param>
private static void DoWork(object param)
{
//
Hashtable table = param as Hashtable;
int start = Convert.ToInt32(table["start"]);
int end = Convert.ToInt32(table["end"]);
List<IPProxy> list = table["list"] as List<IPProxy>;
ProxyParam Param = table["param"] as ProxyParam;
//
string url = string.Empty;
string ip = string.Empty;
IPProxy item = null;
HtmlNodeCollection nodes = null;
HtmlNode node = null;
HtmlAttribute atr = null;
for (int i = start; i <= end; i++)
{
LogHelper.WriteLog(string.Format(" , {0}~{1}, {2}", start, end, i));
url = string.Format("{0}/{1}", Param.IPUrl, i);
var doc = new HtmlDocument();
doc.LoadHtml(GetHTML(url, Param.ProxyIp));
// tr
var trs = doc.DocumentNode.SelectNodes(@"//table[@id='ip_list']/tr");
if (trs != null && trs.Count > 1)
{
LogHelper.WriteLog(string.Format(" {0}, {1}, {2} ", i, url, trs.Count));
for (int j = 1; j < trs.Count; j++)
{
nodes = trs[j].SelectNodes("td");
if (nodes != null && nodes.Count > 9)
{
ip = nodes[2].InnerText.Trim();
if (Param.IsPingIp && !Ping(ip))
{
continue;
}
// IP
item = new IPProxy();
node = nodes[1].FirstChild;
if (node != null)
{
atr = node.Attributes["alt"];
if (atr != null)
{
item.Country = atr.Value.Trim();
}
}
item.IP = ip;
item.Port = nodes[3].InnerText.Trim();
item.ProxyIp = GetIP(item.IP, item.Port);
item.Position = nodes[4].InnerText.Trim();
item.Anonymity = nodes[5].InnerText.Trim();
item.Type = nodes[6].InnerText.Trim();
node = nodes[7].SelectSingleNode("div[@class='bar']");
if (node != null)
{
atr = node.Attributes["title"];
if (atr != null)
{
item.Speed = atr.Value.Trim();
}
}
node = nodes[8].SelectSingleNode("div[@class='bar']");
if (node != null)
{
atr = node.Attributes["title"];
if (atr != null)
{
item.ConnectTime = atr.Value.Trim();
}
}
item.VerifyTime = nodes[9].InnerText.Trim();
list.Add(item);
}
}
LogHelper.WriteLog(string.Format(" {0}, {1} ", i, trs.Count));
}
LogHelper.WriteLog(string.Format(" , {0}~{1}, {2}", start, end, i));
}
}
최종 적 으로 2 만 여 개의 데 이 터 를 얻 을 수 있 습 니 다.자동 투표 단순 실현
.net 의 웹 브 라 우 저 컨트롤 을 사용 하여 페이지 를 불 러 옵 니 다.최종 효 과 는 다음 과 같 습 니 다.
\#region 프 록 시 IP 설정
private void button2_Click(object sender, EventArgs e)
{
string proxy = this.textBox1.Text;
RefreshIESettings(proxy);
IEProxy ie = new IEProxy(proxy);
ie.RefreshIESettings();
//MessageBox.Show(ie.RefreshIESettings().ToString());
}
#endregion
#region IP
private void button3_Click(object sender, EventArgs e)
{
IEProxy ie = new IEProxy(null);
ie.DisableIEProxy();
}
#endregion
#region
private void button1_Click(object sender, EventArgs e)
{
string url = txt_url.Text.Trim();
if (string.IsNullOrEmpty(url))
{
MessageBox.Show(" ");
return;
}
this.webBrowser1.Navigate(url, null, null, null);
}
#endregion
총결산이 편 에서 소개 할 내용 은 여기 서 마 치 겠 습 니 다.다음은 제 기 대 를 적어 주세요!좋아 하 는 친구 가 함께 Task Manager(완전히 개 원 된)를 보완 하여 생활 의 편리 성 을 향상 시 킬 수 있 는 도구 가 되 고 새로운 임 무 를 많이 추가 하 기 를 바 랍 니 다.예 를 들 어 다음 날 비가 오 거나 눈 이 오 면 메 일 로 우산 을 가 져 가라 고...자,이제 소스 코드 를 풀 시간 입 니 다.다음 편 기대 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ThinkPHP 5+jQuery+MySql 투표 기능 구현ThinkpHP 5+jQuery+MySql 투표 기능 을 구현 하여 먼저 효과 도 를 보 여 드 리 겠 습 니 다.효과 가 좋다 고 느끼 시 면 인 스 턴 스 코드 를 참고 하 시기 바 랍 니 다. 효과 그림: 전단...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.