Преобразовать следующий код С# в код Java?

У меня есть следующий код C#, и я хочу иметь эквивалентный ему код Java. Следующий код C# взят из этот ответ на другой вопрос StackOverflow.

Код выглядит следующим образом:

string orkutSite = "http://www.orkut.com/Login.aspx"; // enter correct address
string formPage = "";
string afterLoginPage = "";

// Get postback data and cookies
CookieContainer cookies = new CookieContainer();
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(orkutSite);
getRequest.CookieContainer = cookies;
getRequest.Method = "GET";

HttpWebResponse form = (HttpWebResponse)getRequest.GetResponse();
using (StreamReader response =
    new StreamReader(form.GetResponseStream(), Encoding.UTF8))
{    
    formPage = response.ReadToEnd();
}

Dictionary<string, string> inputs = new Dictionary<string,string>();
inputs.Add("__EVENTTARGET", "");
inputs.Add("__EVENTARGUMENT", "");
foreach (Match input in
    Regex.Matches(formPage,
        @"<input.*?name=""(?<name>.*?)"".*?(?:value=""(?<value>.*?)"".*?)? />",
        RegexOptions.IgnoreCase | RegexOptions.ECMAScript))
{    
    inputs.Add(input.Groups["name"].Value, input.Groups["value"].Value);
}

inputs["username"] = "xxxxx"; // *please*, check for \\
inputs["password"] = "yyyyy"; // correct field names \\

byte[] buffer = 
    Encoding.UTF8.GetBytes(
        String.Join("&",
           Array.ConvertAll<KeyValuePair<string, string>, string(                       
              inputs.ToArray(),
                  delegate(KeyValuePair item)
                  {
                      return item.Key + "=" + HttpUtility.UrlEncode(item.Value);
                  })));

HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(orkutSite);
postRequest.CookieContainer = cookies;postRequest.Method = "POST";
postRequest.ContentType = "application/x-www-form-urlencoded";

// send username/password
using (Stream stream = postRequest.GetRequestStream())
{
    stream.Write(buffer, 0, buffer.Length);
}

// get response from login page
using (StreamReader reader = new StreamReader(
    postRequest.GetResponse().GetResponseStream(), Encoding.UTF8))
{
    afterLoginPage = reader.ReadToEnd();
}

person Yatendra    schedule 07.10.2009    source источник
comment
Итак, с какой частью у вас возникли трудности?   -  person Brian Agnew    schedule 07.10.2009


Ответы (1)


Я не собираюсь делать за вас работу по преобразованию этого фрагмента кода, но могу помочь вам начать работу. Код, который вы указали, выполняет HTTP GET и POST с целой кучей конверсий. Не уверен точно все, что он делает или почему на первый взгляд.

Я подозреваю, что вы можете заменить многое из этого библиотекой более высокого уровня, такой как Apache Commons HttpClient на Яве. Это очень мощная библиотека для подобных вещей, и она более интуитивно понятна, чем простой URLConnection в Java.

У них есть хорошее руководство и примеры использования клиента. Если вы используете этот клиент, вы, вероятно, сможете обойтись гораздо меньшим количеством кода преобразования, чем в вашем образце.

person Chris Dail    schedule 07.10.2009