3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
1

Повторное использование HttpWebRequest

10.06.2014, 13:34. Показов 3186. Ответов 15
Метки нет (Все метки)

Задача: получить с сайта html код, взять оттуда некие данные и затем на этот же сайт отправить post запрос. Т.е. получается в рамках одной сессии HttpWebRequest нужно и считать и записать. Как это сделать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 HttpWebRequest req;
            HttpWebResponse resp;
            StreamReader sr;
            string content;
 
            req = (HttpWebRequest)WebRequest.Create("http://*");
            resp = (HttpWebResponse)req.GetResponse();
            sr = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            content = sr.ReadToEnd();
            sr.Close();
            //req = (HttpWebRequest)WebRequest.Create("http://*"); 
            //вот с этой ^^ строкой работает, но выдаёт другой content
            resp = (HttpWebResponse)req.GetResponse();
            sr = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            content = sr.ReadToEnd();
            sr.Close();
Пробовал копировать и HttpWebRequest и HttpWebResponse
C#
1
2
3
4
HttpWebRequest req,rq;
            HttpWebResponse resp,rsp;
.....
rq=req; rsp=resp;
но результат тот же
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2014, 13:34
Ответы с готовыми решениями:

Повторное использование сокетов
при попытке отправить второй раз текст на сервер выходит exception server class...

Повторное использование исходного кода в C#
есть желание собрать в одном solution несколько (два для начала) projects с разными целевыми...

Повторное использование cookie при GET-запросе
Всем привет. Мне нужно было при гет запросе сохранять в куки-коллекшин куки все полученные, а при...

Повторное использование ресурсов.
Повторно использовать ресурсы я умею, если это, например, кисть. Но если в качестве ресурса...

15
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
10.06.2014, 16:04 2
Нельзя так делать.
Отправил запрос -> Получил ответ
Взял то что нужно с ответа -> Отправил новый запрос.
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
10.06.2014, 16:06  [ТС] 3
так вот именно - я пытаюсь отправить новый запрос с полученными данными, а т.к. создаю новый вебреквест, то и данные уже нужно вводить другие, а не те, которые я получил на предыдущем шаге
0
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
10.06.2014, 16:22 4
C#
1
2
3
4
var wc = new WebClient();
var content = wc.DownloadString("http://");
//еще что-то делаем и освобождаем ресурсы
wc.Dispose();
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
10.06.2014, 16:38  [ТС] 5
http://djangosuit.com/admin/ логин-пароль demo-demo
C#
1
2
3
4
5
6
7
8
 var wc = new WebClient();
            var s = wc.DownloadString("http://djangosuit.com/admin/");
            wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            s = s.Remove(0, s.IndexOf("value='") + 7);
            s = s.Substring(0, s.IndexOf("'"));
            s = "csrfmiddlewaretoken=" + s + "&username=demo&demo=111111&this_is_the_login_form=1&next=%2Fadmin%2F";
            string HtmlResult = wc.UploadString("http://djangosuit.com/admin/", s);
            wc.Dispose();
заходим на сайт, тащим оттуда token, создаём строку запроса и отправляем её. Ошибка 403 доступ запрещён
0
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
10.06.2014, 16:59 6
Лучший ответ Сообщение было отмечено Mastersland как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
        private void button3_Click(object sender, EventArgs e)
        {
            var cc = new CookieContainer();
            var s = Get("http://djangosuit.com/admin/", cc);
            s = s.Remove(0, s.IndexOf("value='", StringComparison.Ordinal) + 7);
            s = s.Substring(0, s.IndexOf("'", StringComparison.Ordinal));
            s = "csrfmiddlewaretoken=" + s + "&username=demo&demo=111111&this_is_the_login_form=1&next=%2Fadmin%2F";
            var htmlResult = Post("http://djangosuit.com/admin/", s, cc);
            MessageBox.Show(@"Done");
        }
 
        private string Post(string url, string post, CookieContainer cc =null)
        {
            var html = string.Empty;
            try
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11";
                request.Method = "POST";
                request.AllowAutoRedirect = true;
                request.CookieContainer = cc;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "*/*";
                request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch");
                request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
                request.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.3");
                var encodedPostParams = Encoding.Default.GetBytes(post);
                request.ContentLength = encodedPostParams.Length;
                request.GetRequestStream().Write(encodedPostParams, 0, encodedPostParams.Length);
                request.GetRequestStream().Close();
                var response = (HttpWebResponse)request.GetResponse();
                var responseStream = response.GetResponseStream();
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                    responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                    responseStream = new System.IO.Compression.DeflateStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                var sRead = new StreamReader(responseStream, Encoding.Default);
                html = sRead.ReadToEnd();
                sRead.Close();
            }
            catch { }
            return html;
        }
 
        public static string Get(string url,CookieContainer cc=null)
        {
            var html = string.Empty;
            try
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.Accept = "*/*";
                request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16";
                request.ServicePoint.Expect100Continue = false;
                request.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.3");
                request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate,gzip");
                request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); request.AllowAutoRedirect = true;
                request.CookieContainer = cc;
                var response = (HttpWebResponse)request.GetResponse();
                var responseStream = response.GetResponseStream();
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                {
                    if (responseStream != null)
                        responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                }
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                    if (responseStream != null)
                        responseStream = new System.IO.Compression.DeflateStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                if (responseStream != null)
                {
                    var sRead = new StreamReader(responseStream, Encoding.UTF8);
                    html = sRead.ReadToEnd();
                    sRead.Close();
                    sRead.Dispose();
                }
            }
            catch { return string.Empty; }
            return html;
 
        }
1
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
10.06.2014, 17:10  [ТС] 7
спасибо огромное!!!
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
27.06.2014, 17:00  [ТС] 8
в вашем запросе я изменил:

C#
1
2
3
4
5
6
7
CookieContainer cook;
private void button3_Click(object sender, EventArgs e)
        {
            var cc = new CookieContainer();
            cook=cc;
..
         }
теперь когда я дальше использую
C#
1
myRequest.CookieContainer = cook;
он не выдаёт мне нужные куки в последующем запросе:
C#
1
csrftoken=gjfdkgflgkjdf; sessionid=gfdgdfgf; user_city=gfdgfd;
вместо
C#
1
timezone_offset=14400; CITY=fgdgf; PHPSESSID=fgfdgdfg; resolution=1; __utma=73997250.1739977506.1403864024.1403864024.1403864024.1; __utmc=73997250; __utmz=73997250.1403864024.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); csrftoken=fgdfgdfg; sessionid=gfgfgdf; messages="fndgfndfl$[[\"__json_message\"fsdfdfs"; user_city=fgdfgfdgdg
0
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
28.06.2014, 03:55 9
Mastersland, используйте тогда CookieCollection

C#
1
2
3
4
5
6
public static string Get(string url,CookieCollection cc=null)
{
//...
request.CookieContainer = new CookieContainer();
if(cc!=null)request.CookieContainer.Add(cc);
//...
то же самое и для метода Post
0
168 / 131 / 29
Регистрация: 16.02.2013
Сообщений: 867
29.06.2014, 03:28 10
Hermein, а если так сделать -
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var cc = new CookieContainer();        
private void button3_Click(object sender, EventArgs e)
        {
            var s = Get("http://djangosuit.com/admin/");
            s = s.Remove(0, s.IndexOf("value='", StringComparison.Ordinal) + 7);
            s = s.Substring(0, s.IndexOf("'", StringComparison.Ordinal));
            s = "csrfmiddlewaretoken=" + s + "&username=demo&demo=111111&this_is_the_login_form=1&next=%2Fadmin%2F";
            var htmlResult = Post("http://djangosuit.com/admin/", s);
            MessageBox.Show(@"Done");
        }
 
        private string Post(string url, string post)
        {
            var html = string.Empty;
            try
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11";
                request.Method = "POST";
                request.AllowAutoRedirect = true;
                request.CookieContainer = cc;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "*/*";
                request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch");
                request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
                request.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.3");
                var encodedPostParams = Encoding.Default.GetBytes(post);
                request.ContentLength = encodedPostParams.Length;
                request.GetRequestStream().Write(encodedPostParams, 0, encodedPostParams.Length);
                request.GetRequestStream().Close();
                var response = (HttpWebResponse)request.GetResponse();
                var responseStream = response.GetResponseStream();
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                    responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                    responseStream = new System.IO.Compression.DeflateStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                var sRead = new StreamReader(responseStream, Encoding.Default);
                html = sRead.ReadToEnd();
                sRead.Close();
            }
            catch { }
            return html;
        }
 
        public static string Get(string url)
        {
            var html = string.Empty;
            try
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.Accept = "*/*";
                request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16";
                request.ServicePoint.Expect100Continue = false;
                request.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.3");
                request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate,gzip");
                request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); request.AllowAutoRedirect = true;
                request.CookieContainer = cc;
                var response = (HttpWebResponse)request.GetResponse();
                var responseStream = response.GetResponseStream();
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                {
                    if (responseStream != null)
                        responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                }
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                    if (responseStream != null)
                        responseStream = new System.IO.Compression.DeflateStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                if (responseStream != null)
                {
                    var sRead = new StreamReader(responseStream, Encoding.UTF8);
                    html = sRead.ReadToEnd();
                    sRead.Close();
                    sRead.Dispose();
                }
            }
            catch { return string.Empty; }
            return html;
 
        }
?
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
01.07.2014, 00:26  [ТС] 11
а получить sessionid как добавить в cookiecontainer? и дальше его использовать
0
168 / 131 / 29
Регистрация: 16.02.2013
Сообщений: 867
01.07.2014, 00:55 12
Mastersland, так куки туда автоматом залетают, надо его только к запросу подключить
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
01.07.2014, 02:09  [ТС] 13
C#
1
 reQ.CookieContainer = cook;
вот так у меня подключается куки, 3 куки подключаются, а sessionid нет(
0
168 / 131 / 29
Регистрация: 16.02.2013
Сообщений: 867
01.07.2014, 06:42 14
Цитата Сообщение от Mastersland Посмотреть сообщение
3 куки подключаются, а sessionid нет(


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Net;
 
namespace test
{
    class Program
    {
        
        
        public static void Main(string[] args)
        {
            CookieContainer cook=new CookieContainer();
            
            HttpWebRequest req=(HttpWebRequest)HttpWebRequest.Create("http://djangosuit.com/admin/");
            req.CookieContainer=cook;
            req.GetResponse().GetResponseStream();
            req.Abort();
            
            Uri url=new Uri("http://djangosuit.com");
            
            foreach(Cookie coll in cook.GetCookies(url))
                Console.WriteLine("name = {0}, value = {1}",coll.Name,coll.Value);
            Console.ReadKey();
            
            
            
            
            
        }
 
    }
}
Миниатюры
Повторное использование HttpWebRequest  
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
05.07.2014, 00:49  [ТС] 15
а если arriva.ru подставить, то работать не будет, хотя в fidder'e есть... не подскажете?
0
3 / 3 / 1
Регистрация: 05.08.2013
Сообщений: 90
10.07.2014, 12:31  [ТС] 16
подниму тему....
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2014, 12:31

Повторное использование DataTemplate в цикле for
Доброго времени суток. Работаю с VkNet. Пытаюсь вывести список друзей через шаблон в ListBox ...

WPF множественное (повторное) использование XAML разметки в коде
XAML кусок <Grid x:Name="cellGrid"> <Grid.RowDefinitions> ...

Ошибка при использование HttpWebRequest
При подключении ссылки System.Net я не могу найти HttpWebRequest. Я использую Visual Studio...

Try catch. Повторное использование
Как еще раз пройтись по "try", если вылезла ошибка? Что в блоке "catch" дописать надо? Пример ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.