PDA

View Full Version : سوال در مورد HTTP Module



hejazee
دوشنبه 24 اسفند 1388, 04:59 صبح
سلام دوستان
چطور می توانم یک ماژول HTTP بنویسم که تقاضای HTTP که به سایت میرسد را نشان دهد؟
لطفا کمک کنید
مثلا تقاضایی به صورت زیر می رسد


GET http://www.google.com/ HTTP/1.1این برنامه ما باید تقاضای فوق را عینا بنویسد
البته توجه کنید که آدرس http://www.google.com/ که در تقاضا ضاهر شد واقعا روی سرور ما وجود ندارد
منظورم این است که سرور تقاضای HTTP را پردازش نکند و error شماره 404 , ... ندهد
بلکه سورس تقاضای Http را عینا به ما بدهد
خیلی نیاز فوری دارم لطفا کمک کنید
دستتان درد نکند
در ضمن اگر زحمت نیست سورس این برنامه را هم برای دانلود بگذارید

KavoshGar_ir
دوشنبه 24 اسفند 1388, 10:25 صبح
توضیحی که دادید برای من نا مفهمه ...

اگر قصد شما اینه روبات های گوگل را هم تشخیص بدید مربوط به مباحث کانتر ها میشه ...

زمانی که تشخیص دادید روبات های گوگل تقاضای بازدید از صفحات را داشتند در فایل لاگ یا دیتابیسی که برای اینکار در نظر گرفتید به صورتی دستی استرینگی که بهش اشاره کردید را درج کنید ...

به عبارتی واضح تر بعد از تشخیص استرینگ مربوطه را دستی درج کنید ... برنامه خاصی نیاز نداره

hejazee
چهارشنبه 26 اسفند 1388, 15:27 عصر
من کاری به گوگل ندارم
من فقط یک برنامه ASP.NET می خواهم که سورس تقاضای HTTP را نشان دهد
مثلا وقتی با مرورگر آن صفحه را بازدید می کنیم اطلاعاتی شبیه به این را نشان دهد


GET /myscript.aspx HTTP/1.1
Host: www.example.org
Accept: */*
Cookie: name=valueهمچنین وقتی پراکسی مرورگر را روی آن اسکریپت تنظیم میکنیم هر سایتی را که بخواهیم با مرورگر بازدید کنیم چون پراکسی مرورگر تنظیم شده است مرورگر تقاضا را به جای این که مستقیما به سایت مورد نظر ما ارسال کند آن را به پراکسی ارسال می کند(که پراکسی همین برنامه ASP.NET است)
مثلا فرض کنید پراکسی مرورگر را روی آدرس mysite.com:80 تنظیم کرده باشیم و برنامه ASP.NET هم روی همین سایت است حال با مرورگر خود مان به آدرس http://www.hello.com می رویم. مرورگر به جای این که به هاست hello.com متصل شود (به دلیل وجود پراکسی) به هاست mysite.com:80 متصل می شود و تقاضای زیر را به آن می فرستد


GET http://www.hello.com HTTP/1.1
Host: www.hello.com
Accept: */*
Cookie: name=valueحال برنامه ASP.NET ما که این تقاضلا را دریافت می کند باید اطلاعات فوق را عینا نمایش دهد
و خطای Bad request را گزارش ندهد
من کاری به سایت گوگل و ... ندارم
بطور خلاصه می خواهم یک برنامه ASP.NET درست کنم که کار یک پراکسی HTTP را انجام دهد
لطفا کمک کنید

amirjalili
چهارشنبه 26 اسفند 1388, 16:38 عصر
اگه منظورتون رو درست متوجه شده باشم احتمالا کد زیر قصد شما رو بر آورده میکنه.





using System;
using System.IO;
using System.Net;


HttpWebRequest request =(HttpWebRequest)WebRequest.Create("http://www.java2s.com");
HttpWebResponse response =(HttpWebResponse)request.GetResponse();
request.Accept = "text/plain";
Console.WriteLine("Request header count: {0}",request.Headers.Count);
WebHeaderCollection header = request.Headers;
for (int i = 0; i < header.Count; i++)
Console.WriteLine(" {0} : {1}",header.GetKey(i), header[i]);

}

Omid.Mafakher
چهارشنبه 26 اسفند 1388, 20:14 عصر
-------------------------------------

hejazee
پنج شنبه 27 اسفند 1388, 02:51 صبح
شما منظور مرا متوجه نشدید
من کد زیر را نوشته ام

Public Class ProxyHandler
Implements IHttpHandler

Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return True
End Get
End Property

Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
Dim inp As String
Dim Request As HttpRequest = context.Request
Dim Response As HttpResponse = context.Response
Response.AddHeader("Content-Type", "Text/Plain")
inp = Request.HttpMethod + " "
inp += Request.Path
inp += " HTTP/1.1" & vbCrLf
Dim header As String
For Each header In Request.Headers
inp += header & ": " & Request.Headers(header) & vbCrLf
Next
Response.Write(inp)
End Sub
End Classکه البته کد کامل را به همراه تصویر اجرا شدن برنامه ضمیمه کردم
ملاحظه می کنید که وقتی برنامه اجرا می شود سورس تقاضای HTTP نمایش داده می شود
حتی اگر تقاضا برای صفحه ای باشد که واقعا روی هاست وجود ندارد.
(مثلا آدرس http://localhost/hello/thisPathDoesntExist/hh.aspx بروید که روی سرور وجود
ندارد ولی با این حال ارور 404 Not Found نمی دهد بلکه عینا تقاضای HTTP را نشان می دهد
مشکل اینجا است که اگر داخل URL از علامت (:) استفاده کنیم مثلا آدرس زیر
http://localhost/he:/hh چون : دارد ارور می دهد می خواهم طوری باشد که به : گیر ندهد
و مثلا تقاضایی به صورت زیر را که : دارد را هم پردازش کند و نشان دهد

GET http://mysite.com/ HTTP/1.1thanks
در ضمن از دوستان عزیز خواهش می کنم ابتدا پست های قبلی ام را بخوانند تا متوجه منظورم بشوند
thanks a lot

Omid.Mafakher
پنج شنبه 27 اسفند 1388, 16:03 عصر
-------------------------------------

hejazee
شنبه 29 اسفند 1388, 09:22 صبح
دوست عزیزم
مشکل همین جاست. URL که در اختیار من نیست که این به جای : از 3a% استفاده کنم
برنامه من قرار است به عنوان یک سرویس دهنده پراکسی عمل کند و در سرویس دهنده های پراکسی HTTP بسیار معمول است که در URL از : استفاده می کنند
مثلا تقاضایی به صورت زیر به پراکسی می رسد


GET http://www.mySite.com/hello.aspx?id=123 HTTP/1.1
و پراکسی باید مقصد این تقاضا (یعنی www.mySite.com (http://www.mySite.com)) را تشخیص دهد و سپس تقاضای فوق را به شکل زیر تبدیل تبدیل می کند


GET /hello.aspx?id=123 HTTP/1.1
و آن را برای سرور www.mySite.com (http://www.mySite.com) ارسال میکند و جواب را پس میگیرد و به مرورگر می فرستد
من می خواهم چنین برنامه ای بسازم
خلاصه این که می خواهم یک برنامه سرویس دهنده پراکسی درست کنم که البته به تقاضا هایی شامل : هم جواب دهد
از تمام دوستانی که جواب پست می کنند بسیار متشکرم

exlord
شنبه 29 اسفند 1388, 22:34 عصر
ایت از تمهیدات امنیتی .Net هستش .... توی .net 4 beta 2 میگن میشه این رو هم handle کرد .... اگه رو IIS تست نکردی ....تست بکن احتمالا اونجا مشکلی نداشته باشی.....

hejazee
یک شنبه 01 فروردین 1389, 02:20 صبح
لطفا دقیقا بگویید چکار کنم؟
(در ضمن آیا میشود همین کار را با PHP کرد یا نه؟ اگر کسی با php بلد است لطفا پست کند)

Omid.Mafakher
یک شنبه 01 فروردین 1389, 23:11 عصر
-------------------------------------