Как запустить запрос GET через службу псевдо-REST в C # - PullRequest
0 голосов
/ 23 мая 2009

Мне нужно связаться с устаревшим приложением php. API - это всего лишь php-скрипты, которые принимают запросы на получение и возвращают ответ в виде XML.

Я хотел бы написать сообщение на C #.

Как лучше всего запустить запрос GET (со многими параметрами) и затем проанализировать результат?

В идеале я хотел бы найти что-то такое простое, как приведенный ниже код на python:

params = urllib.urlencode({
    'action': 'save',
    'note': note,
    'user': user,
    'passwd': passwd,
 })

content = urllib.urlopen('%s?%s' % (theService,params)).read()
data = ElementTree.fromstring(content)
...

UPDATE: Я думаю об использовании XElement.Load, но не вижу способа легко построить запрос GET.

Ответы [ 2 ]

1 голос
/ 23 мая 2009

В WCF REST Starter Kit есть несколько хороших служебных классов для реализации клиентов .NET REST, которые вызывают службы, реализованные на любой платформе.

Вот видео , которое описывает, как использовать клиентские части.

Пример кода:

HttpClient c = new HttpClient("http://twitter.com/statuses");
c.TransportSettings.Credentials = 
    new NetworkCredentials(username, password);
// make a GET request on the resource.
HttpResponseMessage resp = c.Get("public_timeline.xml");
// There are also Methods on HttpClient for put, delete, head, etc
resp.EnsureResponseIsSuccessful(); // throw if not success
// read resp.Content as XElement
resp.Content.ReadAsXElement(); 
0 голосов
/ 23 мая 2009

Простой System.Net.Webclient функционально аналогичен python urllib.

Пример C# (слегка отредактированный из ссылки выше) показывает, как «запустить GET-запрос»:

using System;
using System.Net;
using System.IO;
using System.Web;

public class Test
{
    public static String GetRequest (string theService, string[] params)
    {
        WebClient client = new WebClient ();

        // Add a user agent header in case the 
        // requested URI contains a query.

        client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

        string req = theService + "?";
        foreach(string p in params)
            req += HttpUtility.UrlEncode(p) + "&";
        Stream data = client.OpenRead ( req.Substring(0, req.Length-1)
        StreamReader reader = new StreamReader (data);
        return = reader.ReadToEnd ();
    }
}

Чтобы проанализировать результат, используйте классы System.XML или лучше - System.Xml.Linq классы. Прямой возможностью является метод XDocument.Load(TextReader) - вы можете использовать поток WebClient, возвращаемый OpenRead() напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...