Здравствуйте! Сегодня: Вс, 16 Июн 2019, Ваш IP: 34.207.78.157 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Общие вопросы программирования
+ Создать новую тему Страница: 1
Тема: Загрузка файла HTTP на C# · +  +  дата добавления: 22.03.2015 / 11:53
Автор темы:
Sharp
Sharp
тем: 1 / ответов: 2 / благодарностей: 0 / репутация: 0
ответов: 2
создал(а) тем: 1


Всем доброго дня/ночи/утра. Понадобилось загрузить файл средствами шарпа. Уже неделю мучаюсь, но ни как не могу понять реализацию. Были попытки через библиотеку xNet сделать, но и там свои проблемы. Может есть у кого прокоментированный код чтобы моя амфибия поняла, как это сделать. Передать нужно 2 параметра указанных на скриншоте.

Технологии: C#
 
Ответ # 1 # · +  +  дата добавления: 22.03.2015 / 14:56
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Тип содержимого (content-type) должен быть multipart/form-data, с указанием границы (boundary).

Параметры в запрос записываются с указанием для каждого элемента заголовка Content-Disposition. Содержимое разделяется указанной в типе содержимого (content-type) границей (boundary).

В этой статьи показано как.
 
Ответ # 2 # · +  +  дата добавления: 22.03.2015 / 17:44
Автор ответа:
Sharp
Sharp
тем: 1 / ответов: 2 / благодарностей: 0 / репутация: 0
ответов: 2
создал(а) тем: 1


Смотрел ваш пример, но так и не понял где и когда передавать параметры. Вы делали под API и ответ у вас был в xml, а у меня будет в html и API нету. Отчет финдлера.


 private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string uploadFileContentType = "application/octet-stream"; // по умолчанию будет application/octet-stream
            Microsoft.Win32.RegistryKey myRegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Path.GetExtension(textBox1.Text));
            if (myRegistryKey != null && myRegistryKey.GetValue("Content Type") != null)
            {
                uploadFileContentType = myRegistryKey.GetValue("Content Type").ToString();
            }

            string uploadUrl = "http://сайтd.рф/upload.php";
            HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(uploadUrl);
            req.Method = "POST";

            string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
            req.ContentType = String.Format("multipart/form-data; boundary={0}", boundary);

        }
    }

Дальше ступор. Направьте, что и как дальше
 
Ответ # 3 # · +  +  дата добавления: 22.03.2015 / 19:51
Автор ответа:
Sharp
Sharp
тем: 1 / ответов: 2 / благодарностей: 0 / репутация: 0
ответов: 2
создал(а) тем: 1


Еще одна попытка. Правда половину, кода даже не понимаю. Программа компилируется, но ни чего не отправляет
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RefudScan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "JPEG|*.jpg|PNG|*.png|GIF|*.gif";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
                       string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
            var request = HttpWebRequest.Create("http://site.ru/upload.php") as HttpWebRequest;
            request.Method = "POST";
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Referer = "http://site.ru/upload.php";
            request.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0";
            request.ContentType = String.Format("multipart/form-data; boundary=---------------------------{0}", boundary);
            request.KeepAlive = true;
            request.ProtocolVersion = new System.Version(1, 0);
            request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            request.Timeout = 600000;
            request.AllowAutoRedirect = true;

            string uploadFileContentType = "application/octet-stream"; // по умолчанию будет application/octet-stream
            Microsoft.Win32.RegistryKey myRegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Path.GetExtension(textBox1.Text));
            if (myRegistryKey != null && myRegistryKey.GetValue("Content Type") != null)
            {
                uploadFileContentType = myRegistryKey.GetValue("Content Type").ToString();
            }

            Stream myReqStream = request.GetRequestStream();
            string header = String.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n", boundary, "format");
            byte[] h = System.Text.Encoding.UTF8.GetBytes(header);
            myReqStream.Write(h, 0, h.Length);
            byte[] b = System.Text.Encoding.UTF8.GetBytes("xml");
            myReqStream.Write(b, 0, b.Length);

            header = String.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; " +
                                   "filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n",
                                   boundary, "uploadedfile", Path.GetFileName(textBox1.Text), uploadFileContentType);
            h = System.Text.Encoding.UTF8.GetBytes(header);
            myReqStream.Write(h, 0, h.Length);

            using (FileStream myFile = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader myReader = new BinaryReader(myFile))
                {
                    byte[] buffer = myReader.ReadBytes(2048);
                    while (buffer.Length > 0)
                    {
                        myReqStream.Write(buffer, 0, buffer.Length);
                        buffer = myReader.ReadBytes(2048);
                    }
                }
            }

            string footer = String.Format("\r\n--{0}--\r\n", boundary);
            byte[] f = System.Text.Encoding.UTF8.GetBytes(footer);
            myReqStream.Write(f, 0, f.Length);
        }
    }
}
 
Ответ # 4 # · +  +  дата добавления: 23.03.2015 / 12:41
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Под что делать, значения не имеет. Протокол HTTP одинаковый везде.

Первый вариант кода совсем недоделанный.
Второй более ли менее должен работать.
byte[] b = System.Text.Encoding.UTF8.GetBytes("xml");
Зачем? Это же значение параметра.

См. на трафик в Fiidler. При типе содержимого multipart/form-data тело запроса будет следующим:

--граница
Content-Disposition: form-data; name=имяПараметра

значениеПараметра

--граница
Content-Disposition: form-data; name=имяПараметра2

значениеПараметра2

--граница
Content-Disposition: form-data; name=имяПараметраДляФайла; filename=имяФайла
Content-Type: типа/содержимого

телоФайла

...

и т.д. и т.п.

...

--граница в конце запроса

Если нужно передать параметр upload_file с одноименным значением, то код должен быть таким:
// заголовок, см. что будет вставлено в name="{1}"
string header = String.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n", boundary, "upload_file");
// получаем массив байт из текста заголовка
byte[] h = System.Text.Encoding.UTF8.GetBytes(header);
// пишем заголовок в запрос
myReqStream.Write(h, 0, h.Length);
// получаем массив байт для значения параметра
byte[] b = System.Text.Encoding.UTF8.GetBytes("upload_file"); // значение параметра
// пишем значение параметра в запрос
myReqStream.Write(b, 0, b.Length);
И так должно быть с каждым параметром, который необходимо передать.

Код передачи файла вроде правильный. Нужно в Fiddler-е смотреть, в режиме RAW.
 
Ответ # 5 # · +  +  дата добавления: 08.04.2015 / 22:38
Автор ответа:
i32
i32
тем: 71 / ответов: 280 / благодарностей: 2 / репутация: 38
ответов: 280
создал(а) тем: 71


Но это я тоже пытался описать ..
В анолизаторе все грузится в байтах а отправка не шла..
HttpClient -все пошло...Я не стал далее париться..А так примерно такой код.
Dim boundary As String = "------WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x")
	Dim webrequest__1 As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
	webrequest__1.CookieContainer = New CookieContainer()
	webrequest__1.ContentType = Convert.ToString("multipart/form-data; boundary=") & boundary
	webrequest__1.Method = "POST"
	' Build up the post message header
	Dim sb As New StringBuilder()
	sb.Append(boundary)
	sb.Append(vbCr & vbLf)
	sb.Append("Content-Disposition: form-data; name=""")
	sb.Append(fileFormName)
' end t.d.
Dim postHeader As String = sb.ToString()
	Dim postHeaderBytes As Byte() = Encoding.UTF8.GetBytes(postHeader)
	' Build the trailing boundary string as a byte array
	' ensuring the boundary appears on a line by itself
	Dim boundaryBytes As Byte() = Encoding.ASCII.GetBytes((Convert.ToString(vbCr & vbLf & "--") & boundary) + vbCr & vbLf)
	Dim fileStream As New FileStream(uploadfile, FileMode.Open, FileAccess.Read)
	Dim length As Long = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length
	webrequest__1.ContentLength = length
	Dim requestStream As Stream = webrequest__1.GetRequestStream()
	' Write out our post header
	requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length)
	' Write out the file contents
	Dim buffer As Byte() = New [Byte](CUInt(Math.Min(4096, CInt(fileStream.Length))) - 1) {}
	Dim bytesRead As Integer = 0
	While (InlineAssignHelper(bytesRead, fileStream.Read(buffer, 0, buffer.Length))) <> 0
		requestStream.Write(buffer, 0, bytesRead)
	End While
	' Write out the trailing boundary
	requestStream.Write(boundaryBytes, 0, boundaryBytes.Length)
	Dim responce As WebResponse = webrequest__1.GetResponse()
	Dim s As Stream = responce.GetResponseStream()
	Dim sr As New StreamReader(s)
	Return sr.ReadToEnd()
End If
Технологии: .NET Framework
 
Ответ # 6 # · +  +  дата добавления: 30.04.2015 / 17:03
Автор ответа:
andrushko.k
andrushko.k
тем: 0 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 0


Всем привет. У меня вопрос по данной теме. Помогите. Создал программу на WPF для публикации объявлений на сайте. На сайте использую Osclass шаблон olxx.
В программе формирую POST запрос, а в ответ получаю главную страницу сайта, соответственно новое объявление не добавляется. Помогите!!! Уже не знаю что делать =(

Код С#. При нажатии на кнопку.
  HttpWebRequest requestToServerEndpoint =
                (HttpWebRequest)WebRequest.Create("http://myhost.com/index.php");
 
            string boundaryString = "----WebKitFormBoundaryVcYAfPbj8Cn0vuMV";
            string fileUrl = @"C:\SomeRandomFile.pdf";
            requestToServerEndpoint.Method = WebRequestMethods.Http.Post;
            requestToServerEndpoint.ContentType = "multipart/form-data; boundary=" + boundaryString;
            requestToServerEndpoint.KeepAlive = true;
            requestToServerEndpoint.Credentials = System.Net.CredentialCache.DefaultCredentials;
            requestToServerEndpoint.Referer = "http://myhost.com/index.php?page=item&action=item_add";
            requestToServerEndpoint.Host = "myhost.com";
 
            // Use a MemoryStream to form the post data request,
            // so that we can get the content-length attribute.
            MemoryStream postDataStream = new MemoryStream();
            StreamWriter postDataWriter = new StreamWriter(postDataStream);
 
            // Include value from the myFileDescription text area in the post data
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
                                    "CSRFName",
                                    "CSRF422030255_1740355879");
 
 
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
                                    "CSRFToken",
                                    "bc24588a2b5e3833c425773a4d0b370c2ce31773ab3b6270aacd2d1b969d174e5088f40bf9b325de6eda8b48e00623f64cb9d8d598529e82461f02374d05b50e");
 
           
                                   
 
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
                                    "action",
                                    "item_add_post");
 
 
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
                                   "page",
                                   "item");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
                       "title[cs_CZ]",
                       "Test2");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
                       "catId",
                       "351");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
           "description[cs_CZ]",
           "testing");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
         "price",
         "0");
 
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
        "currency",
        "CZK");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
       "countryId",
       "CZ");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
       "regionId",
       "782662");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
       "cityId",
       "501397");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            postDataWriter.Write("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
      "contactEmail",
      "andrushko.k@gmail.com");
            postDataWriter.Write("\r\n" + boundaryString + "\r\n");
            // Include the file in the post data
            //postDataWriter.Write("\r\n--" + boundaryString + "\r\n");
            //postDataWriter.Write("Content-Disposition: form-data;"
            //                        + "name=\"{0}\";"
            //                        + "filename=\"{1}\""
            //                        + "\r\nContent-Type: {2}\r\n\r\n",
            //                        "myFile",
            //                        System.IO.Path.GetFileName(fileUrl),
            //                        System.IO.Path.GetExtension(fileUrl));
            postDataWriter.Flush();
 
            // Read the file
            //FileStream fileStream = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
            //byte[] buffer = new byte[1024];
            //int bytesRead = 0;
            //while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            //{
            //    postDataStream.Write(buffer, 0, bytesRead);
            //}
            //fileStream.Close();
 
            //postDataWriter.Write("\r\n--" + boundaryString + "--\r\n");
            //postDataWriter.Flush();
 
            // Set the http request body content length
            requestToServerEndpoint.ContentLength = postDataStream.Length;
 
            // Dump the post data from the memory stream to the request stream
            using (Stream s = requestToServerEndpoint.GetRequestStream())
            {
                postDataStream.WriteTo(s);
            }
            postDataStream.Close();
 
            WebResponse response = requestToServerEndpoint.GetResponse();
            StreamReader responseReader = new StreamReader(response.GetResponseStream());
            string replyFromServer = responseReader.ReadToEnd();
           // MessageBox.Show(replyFromServer);
            ResultText.Text = replyFromServer;
Для "отлова" запросов использую Fiddler
Захожу на сайт, заполняю поля вручную, нажимаю кнопку добавления, отловил запрос:
POST http://myhost.com/index.php HTTP/1.1
Host: myhost.com
Connection: keep-alive
Content-Length: 2034
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://myhost.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Referer: http://myhost.com/index.php?page=item&action=item_add
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: osclass=sr3a627lj7bqc7gtmoum2etm71; a1f85=last_submit_item%261430317688
 
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="CSRFName"
 
CSRF422030255_1740355879
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="CSRFToken"
 
bc24588a2b5e3833c425773a4d0b370c2ce31773ab3b6270aacd2d1b969d174e5088f40bf9b325de6eda8b48e00623f64cb9d8d598529e82461f02374d05b50e
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="action"
 
item_add_post
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="page"
 
item
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="title[cs_CZ]"
 
Test
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="catId"
 
351
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="description[cs_CZ]"
 
test
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="price"
 
0
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="currency"
 
CZK
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="qqfile"; filename=""
Content-Type: application/octet-stream
 
 
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="countryId"
 
CZ
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="regionId"
 
782662
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="cityId"
 
501397
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="address"
 
 
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="cityArea"
 
 
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="cityAreaId"
 
 
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="contactName"
 
 
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="contactEmail"
 
andrushko.k@gmail.com
------WebKitFormBoundaryVcYAfPbj8Cn0vuMV--
В результате работы объявление добавляется. Затем запускаю свою программу, нажимаю на кнопку добавления, отловил запрос:
POST http://myhost.com/index.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Referer: http://myhost.com/index.php?page=item&action=item_add
Host: myhost.com
Content-Length: 1480
Expect: 100-continue
Connection: Keep-Alive
 
 
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="CSRFName"
 
CSRF422030255_1740355879
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="CSRFToken"
 
bc24588a2b5e3833c425773a4d0b370c2ce31773ab3b6270aacd2d1b969d174e5088f40bf9b325de6eda8b48e00623f64cb9d8d598529e82461f02374d05b50e
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="action"
 
item_add_post
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="page"
 
item
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="title[cs_CZ]"
 
Test2
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="catId"
 
351
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="description[cs_CZ]"
 
testing
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="price"
 
0
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="currency"
 
CZK
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="countryId"
 
CZ
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="regionId"
 
782662
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="cityId"
 
501397
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Content-Disposition: form-data; name="contactEmail"
 
andrushko.k@gmail.com
----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Результат: ResultText.Text хранит в себе HTML код главной страницы. На сайт объявление не добавляется =(. В чем может быть проблема, помогите.
Технологии: C#, Windows Presentation Foundation (WPF)
 
Ответ # 7 # · +  +  дата добавления: 30.04.2015 / 17:32
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Как минимум, Cookies нет.
 
Ответ # 8 # · +  +  дата добавления: 30.04.2015 / 18:40
Автор ответа:
andrushko.k
andrushko.k
тем: 0 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 0


Спасибо. Я создал поле, с типом данных CookieContainer, в своем классе.

затем при формировании запроса добавляю cookies
requestToServerEndpoint.CookieContainer = cookies;

Потом в самом конце(после получения ответа) обновляю cookies

 cookies = requestToServerEndpoint.CookieContainer;

Теперь первый запрос, как был, так и остался, а во втором появилась строчка cookies

POST http://myhost.com/index.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryVcYAfPbj8Cn0vuMV
Referer: http://myhost.com/index.php?page=item&action=item_add
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Host: myhost.com
Cookie: osclass=2imt0k6habmlj0eqjvc940tsl0
Content-Length: 1642
Expect: 100-continue

Но на сайте ничего не появилось
 
Ответ # 9 # · +  +  дата добавления: 30.04.2015 / 19:27
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


CSRFToken - наверняка элемент защиты. Должен быть динамичным, чтобы от защиты был толк.

CSRF - Сross Site Request Forgery

Нужно изучить механизм защиты и повторить все на своей стороне.

Либо при заходе на страницу добавления данных будут ключи в скрытых полях. Либо ключи формируются на стороне JavaScript. Или все сразу.
 
Ответ # 10 # · +  +  дата добавления: 01.05.2015 / 09:13
Автор ответа:
andrushko.k
andrushko.k
тем: 0 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 0


Большое спасибо. Уже более понятно.
В общем ситуация такая:
Я все запросы отлавливал с одного и того же браузера. CSRFToken и CSRFUser никогда не менялся.
Когда вы сказали обратить внимание, я попробовал другой браузер там уже были другие показатели. Затем проверив ответ, который приходит в мою программу, я обнаружил что CSRFToken и CSRFUser генерируються каждый раз новые. Они хранятся в скрытых полях формы. Подскажите как мне их отловить? Или обязательно искать алгоритм генерации? И если искать то где?
 
Страница: 1 + Создать новую тему