Seganapa
@Seganapa

Как отловить ответ сервера (Awesomium 1.7)

Всем доброго дня!
Есть тут люди, познавшие awesomium?

При авторизации на одном сайте, браузер автоматом отправляет несколько Post запросов.
Мне очень нужно поймать ответ одного из них?

Думал можно посредством JavaScript это сделать, но так и не нашел решение…

Видимо мне нужно это: http://awesomium.com/docs/1_7_rc3/sharp_api/html/P_Awesomium_Core_WebCore_ResourceInterceptor.htm

Но как с этим работать так и не понял…
  • Вопрос задан
  • 5896 просмотров
Пригласить эксперта
Ответы на вопрос 6
может по старинке каким нибудь wireshark? или надо в коде ловить?
Ответ написан
Комментировать
Seganapa
@Seganapa Автор вопроса
к сожалению именно в коде ловить, для дальнейшего парсинга…
Ответ написан
Комментировать
kasthack
@kasthack
Попробуйте Fiddler2.
Ответ написан
Комментировать
Seganapa
@Seganapa Автор вопроса
Все дело в том, что сторонние сниферы мне не помогут… Мне нужно поймать запрос именно в моем приложении
Ответ написан
Комментировать
@humblegenius
Вот пример для ResourceInterceptor в версии 1.7:
class ResourceInterceptor : IResourceInterceptor {
	public bool OnFilterNavigation(NavigationRequest request) {
		throw new NotImplementedException();
	}

	unsafe public ResourceResponse OnRequest(ResourceRequest request) {
		string url = request.Url.OriginalString;
		string name = Path.GetFileName(url);
		string ext = Path.GetExtension(url);
		byte[] bytes = ResourceByteArray(name);
		if (bytes == null) {
			System.Windows.Forms.MessageBox.Show("File Not Found: " + url);
			bytes = new byte[] { };
		}
		fixed (byte* p = bytes) {
			IntPtr ptr = (IntPtr)p;
			return ResourceResponse.Create(Convert.ToUInt32(bytes.Length), ptr, GetMimeType(ext));
		}
	}
}

void Form1_Shown(object sender, EventArgs e) {
	WebCore.ResourceInterceptor = new ResourceInterceptor();
	webControl1.Source = new Uri("asset://sss/index.html");
}


Но в отличии от версии 1.6 я не нашел как в 1.7 перехватывать запросы с другого домена. Он работает только для адресов, которые начинаются на «asset://».
Ответ написан
Комментировать
@humblegenius
Либо с помощью DataSource для конкретного локального домена:
class MyDataSource : DataSource {
	unsafe protected override void OnRequest(DataSourceRequest request) {
		string url = request.Path.Split('#')[0];
		string name = Path.GetFileName(url);
		string ext = Path.GetExtension(url);
		byte[] bytes = ResourceByteArray(name);
		if (bytes == null) {
			System.Windows.Forms.MessageBox.Show("File Not Found: " + url);
			bytes = new byte[] { };
		}
		DataSourceResponse resp=new DataSourceResponse();
		fixed (byte* p = bytes) {
			IntPtr ptr = (IntPtr)p;
			resp.Buffer=ptr;
			resp.MimeType=GetMimeType(ext);
			resp.Size=Convert.ToUInt32(bytes.Length);
			SendResponse(request, resp);
		}
				
	}
}

void Form1_Shown(object sender, EventArgs e) {
	webControl1.WebSession.AddDataSource("sss", new MyDataSource());
	webControl1.Source = new Uri("asset://sss/index.html");
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы