Мой запрос post на https://qrng.physik.hu-berlin.de / сбой, почему?

#c# #vb.net #web-services #web-applications

#c# #vb.net #веб-сервисы #веб-приложения

Вопрос:

страница в https://qrng.physik.hu-berlin.de / предоставляет веб-службу генератора квантовых чисел с высокой скоростью передачи данных, и я пытаюсь получить доступ к этой службе.

Однако мне не удалось этого сделать. Это мой текущий код:

 using System;
using System.Collections.Generic;
using System.Linq;
using S=System.Text;
using System.Security.Cryptography;
using System.IO;
namespace CS_Console_App
{
    class Program
    {
        static void Main()
        {
            System.Net.ServicePointManager.Expect100Continue = false;
            var username = "testuser";
            var password = "testpass";
            System.Diagnostics.Debug.WriteLine(Post("https://qrng.physik.hu-berlin.de/", "username=" username "amp;password=" password));
            Get("http://qrng.physik.hu-berlin.de/download/sampledata-1MB.bin");
        }
        public static void Get(string url)
        {
            var my_request = System.Net.WebRequest.Create(url);
            my_request.Credentials = System.Net.CredentialCache.DefaultCredentials;
            var my_response = my_request.GetResponse();
            var my_response_stream = my_response.GetResponseStream();
            var stream_reader = new System.IO.StreamReader(my_response_stream);
            var content = stream_reader.ReadToEnd();
            System.Diagnostics.Debug.WriteLine(content);
            stream_reader.Close();
            my_response_stream.Close();
        }
        public static string Post(string url, string data)
        {


            string vystup = null;
            try
            {
                //Our postvars
                byte[] buffer = System.Text.Encoding.ASCII.GetBytes(data);
                //Initialisation, we use localhost, change if appliable
                System.Net.HttpWebRequest WebReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
                //Our method is post, otherwise the buffer (postvars) would be useless
                WebReq.Method = "POST";
                //We use form contentType, for the postvars.
                WebReq.ContentType = "application/x-www-form-urlencoded";
                //The length of the buffer (postvars) is used as contentlength.
                WebReq.ContentLength = buffer.Length;
                //We open a stream for writing the postvars
                Stream PostData = WebReq.GetRequestStream();
                //Now we write, and afterwards, we close. Closing is always important!
                PostData.Write(buffer, 0, buffer.Length);
                PostData.Close();
                //Get the response handle, we have no true response yet!
                System.Net.HttpWebResponse WebResp = (System.Net.HttpWebResponse)WebReq.GetResponse();
                //Let's show some information about the response
                Console.WriteLine(WebResp.StatusCode);
                Console.WriteLine(WebResp.Server);

                //Now, we read the response (the string), and output it.
                Stream Answer = WebResp.GetResponseStream();
                StreamReader _Answer = new StreamReader(Answer);
                vystup = _Answer.ReadToEnd();

                //Congratulations, you just requested your first POST page, you
                //can now start logging into most login forms, with your application
                //Or other examples.
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return vystup.Trim()   "n";

        }
    }

}
  

У меня возникает ошибка 403 forbidden при попытке выполнить запрос get наhttp://qrng.physik.hu-berlin.de/download/sampledata-1MB.bin .

После отладки abit я понял, что, хотя я указал действительное имя пользователя и пароль, HTML-ответ, отправленный после моего POST-запроса, указывает на то, что я фактически не входил в систему после моего POST-запроса.

Кто-нибудь знает, почему это так, и как я могу обойти это, чтобы вызвать службу?

Удар. кто-нибудь может заставить это работать или сайт просто мошенничество?

Комментарии:

1. Вы уверены, что ваш URL с именем пользователя и паролем действительно является допустимым способом входа на этот сайт?

2. похоже, вы не используете определенные переменные для имени пользователя и пароля?

3. @Daniel Hilgarth да, это допустимо. Вы могли бы попробовать создать учетную запись и вложить значения самостоятельно.

4. @Michel на самом деле я не публиковал фактическое имя пользователя и пароль, но вы можете быть уверены, что они заменены реальными

5. @Daniel Hilgarth Я создал тестового пользователя. Имя пользователя — testuser, а пароль — testpass. (на случай, если вам нужна эта учетная запись для тестирования)

Ответ №1:

Сайт, безусловно, не является мошенничеством. Я разработал генератор и вложил в него свою научную репутацию. Проблема в том, что вы пытаетесь использовать сервис не так, как предполагалось. Образцы файлов действительно предназначались только для загрузки вручную в целях базового тестирования. Предполагалось, что автоматический доступ для извлечения данных в приложение должен был быть реализован через предоставляемые нами библиотеки DLL. С другой стороны, я не знаю о каком-либо явном намерении помешать вашей реализации работать. Я полагаю, что если веб-браузер может войти в систему и получить данные, какая-то программа должна быть в состоянии сделать то же самое. Возможно, только запрос на вход немного сложнее. Понятия не имею. Серверное программное обеспечение было разработано кем-то другим, и я не могу беспокоить его этим прямо сейчас.

Мик

Комментарии:

1. спасибо за ответ. только один вопрос: являются ли образцы данных просто «старыми образцами» или это «горячо сгенерированные» случайные числа (которые все еще работают сейчас?)

2. @Pacerier Файлы всегда создаются заново, и он все еще работает сейчас. Единственная «устаревшесть» может возникнуть из-за кэширования диска, но кэшированные данные никогда не доставляются более одного раза.

Ответ №2:

На самом деле, генератор теперь также можно приобрести. Смотрите здесь: http://www.picoquant.com/products/pqrng150/pqrng150.htm

Ответ №3:

Вы пытались это изменить

 my_request.Credentials = System.Net.CredentialCache.DefaultCredentials
  

Для

 my_request.Credentials = new NetworkCredential(UserName,Password);
  

как описано на странице MSDN?

Комментарии:

1. Я создал тестового пользователя. Имя пользователя — testuser, а пароль — testpass. (на случай, если вам нужна эта учетная запись для тестирования) Смотрите мой отредактированный вопрос