Возникла необходимость пробежаться списком проксей по WEB страничке, где выполняется JS ( собирается URL и отправляет параметр данные дальше )
Решил использовать WebBrowser, собственно тут проблемка с subj-ом и началась, не могу натянуть прокси и пройти авторизацияю.
Из найденных способов нашел вариант - лезть в реестр и менять там данные, но с авторизацией вопрос так и не решился.
Был найден вариант юзать уже установленный в IE проксятник ( но у нас они постоянно будут меняться ). Вариант тоже отпал.
Установил компонент Skybound Geko, всё бы ничего - но сцуко не даёт авторизоваться HTTP проксятник.
Хочется сделать красиво, без костылей..
Я уверен что задачка решаема..
Кстать, забегу за ранее.. была мысль посмотреть этот JS собрать URL по кускам - но это правда тот ещё геморой, проще прогрузить страницу и дать JS -у отработать своё под забитым проксятником..
Ну, если по-чесноку, то можно это сотворить прямо из C#. Есть такое страшилище, которое зовётся "[Ссылки могут видеть только зарегистрированные пользователи. ]". [Ссылки могут видеть только зарегистрированные пользователи. ]. Авось получится вычленить js-ку и запустить.
Public struct Struct_INTERNET_PROXY_INFO
{
public int dwAccessType;
public IntPtr proxy;
public IntPtr proxyBypass;
};
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
private void RefreshIESettings(string strProxy)
{
const int INTERNET_OPTION_PROXY = 38;
const int INTERNET_OPEN_TYPE_PROXY = 3;
Struct_INTERNET_PROXY_INFO struct_IPI;
// Filling in structure
struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);
struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");
// Allocating memory
IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));
// Converting structure to IntPtr
Marshal.StructureToPtr(struct_IPI, intptrStruct, true);
bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));
}
private void SomeFunc()
{
RefreshIESettings("192.168.1.200:1010");
System.Object nullObject = 0;
string strTemp = String.Empty;
System.Object nullObjStr = strTemp;
axWebBrowser1.Navigate("http://willstay.tripod.com", ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr);
}
RefreshIESettings("127.0.0.1:3128");
webBrowser1.Navigate("http://www.myip.ru/en-EN/index.php", "_self", null, "User-Agent: Custom User Agent string\r\nReferer: [Ссылки могут видеть только зарегистрированные пользователи. ] Basic dXNlcjpragzZg==");
По сути прошел бейс авторизацию в хидере в проксике авторизовался..
запрос выполнился, но одно***ственно, windows попросил меня ввеси данные прокси, для авторизации..
можно ли как нибудь обойти?
[Ссылки могут видеть только зарегистрированные пользователи. ]
Последний раз редактировалось slejpni; 26.11.2013 в 09:42.
Причина: Добавлено сообщение
Попробуй [Ссылки могут видеть только зарегистрированные пользователи. ] со строчки "Существует несколько способов обработки HTTP_STATUS_PROXY_AUTH_REQ без отображения пользовательского интерфейса"
а, так разве не проще пакетами, а прокси считывать из текстовика циклом??
________________
Я - часть той силы, что вечно хочет зла и вечно совершает благо.
Если вы думаете, что став модером, вы не сможете тролить,вы ошибаетесь, теперь вы тролите всех своим существованием
случайность - визитная карточка бога.
Жизнь слишком коротка, чтобы волноваться о том, что о тебе подумают или скажут люди
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Так веббраузер только для того что бы не выполнять JS...
Точней, что бы выполнить..
Цитата:
а, так разве не проще пакетами, а прокси считывать из текстовика циклом??
ммм, попробую обьяснить задачку ещё раз, на страничке размещён хитровыебанный JS, который определяет по DOM -у полноценность нашего браузера. Конечно можно было бы разобрать JS и постараться с эмулировать запрос - но хочется решить всё менее геморойно.
Вот и пришла мысль использовать WebBrowser, что-бы с эмулить полноценно запрос и не париться.
Немного об успехах, ручное редактирование заголовков (вставка авторизации для прокси )позволила мне послать только один запрос через проксятник, все остальные запросы шлются уже без этого хиддера...
по тому и всплывает Windows окно с просьбой авторизоваться у проксика.
Касательно генерации списков IP - накидал функцию, может кому пригодится.
Собственно ничего сложного, но мне пришлось помучаться из за незнания синтаксиса C# при работе с переменными..
generate_proxy
Код:
static List<string> generate_proxy(string d1, string d2)
{
var list = new List<string>();
int dest = Convert.ToInt32(ToInt(d2) - ToInt(d1)) + 1;
for (int i = 0; i < dest; i++)
{
long ip = ToInt(d1) + i;
list.Add(ToAddr(ip).ToString());
}
return Randomize(list);
}
Попробуй [Ссылки могут видеть только зарегистрированные пользователи. ] со строчки "Существует несколько способов обработки HTTP_STATUS_PROXY_AUTH_REQ без отображения пользовательского интерфейса"
Большое спасибо за комментарии!
В общем, вариант с JS отпал, так как хитровыебанный скрипт проверяет DOM у браузера и выдирает от туда реферер.
Возиться со скриптом и пытаться поделать генерируемые им параметры тот ещё геморой =(
Зато, HTTP_STATUS_PROXY_AUTH_REQ - подкинуло на новые размышления, наткнулся по ходу на другие статьи..
Попытался модернизировать функцию RefreshIESettings и пройти авторизацию