2012-07-29 1 views
3

J'ai un pdf avec une description de l'API. Je dois me connecter à leur webservice. Webservice est basé sur le protocole REST. Pour me connecter à ce webservice, je dois appeler l'URL comme suit: http://api.webepartners.pl/wydawca/Authorize?login=test&password=passComment se connecter à WebService avec le protocole REST

J'ai un compte et un mot de passe. Lorsque je remplace test et passe avec mon login et psw et passé url dans webbrowser il semble que c'est ok. Aucune erreur ne se produit. Mais je dois le faire par programmation en C#. dans google j'ai trouvé: http://developer.yahoo.com/dotnet/howto-rest_cs.html

J'essaie ce code:

Uri address = new Uri(@"http://api.webepartners.pl/wydawca/Authorize"); 

      // Create the web request 
      HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 

      // Set type to POST 
      request.Method = "POST"; 
      request.ContentType = "application/x-www-form-urlencoded"; 

      // Create the data we want to send 
      //string appId = "YahooDemo"; 
      //string context = "Italian sculptors and painters of the renaissance" 
      //     + "favored the Virgin Mary for inspiration"; 
      //string query = "madonna"; 

      string userName = "mylogin"; 
      string passsword = "mypassword"; 

      StringBuilder data = new StringBuilder(); 
      //data.Append("appid=" + HttpUtility.UrlEncode(appId)); 
      //data.Append("&context=" + HttpUtility.UrlEncode(context)); 
      //data.Append("&query=" + HttpUtility.UrlEncode(query)); 
      data.Append("login=" + HttpUtility.UrlEncode(userName)); 
      data.Append("&password=" + HttpUtility.UrlEncode(passsword)); 

      // Create a byte array of the data we want to send 
      byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString()); 

      // Set the content length in the request headers 
      request.ContentLength = byteData.Length; 

      // Write data 
      using (Stream postStream = request.GetRequestStream()) 
      { 
       postStream.Write(byteData, 0, byteData.Length); 
      } 

      // Get response 
      using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) // error 
      { 
       // Get the response stream 
       StreamReader reader = new StreamReader(response.GetResponseStream()); 
      } 

et je me suis erreur dans la ligne en utilisant (réponse HttpWebResponse = request.GetResponse() comme ..

An exception of type 'System.Net.WebException' occurred in System.dll but was not handled in user code 

Additional information: The remote server returned an error: (405) Method Not Allowed. 

quelqu'un peut-il me aider?

Merci

Répondre

3

Vous envoyez une demande POST avec nom d'utilisateur et mot de passe dans le corps de la demande. Mais il semble que le service Web attend un service GET où tout est dans l'URL de la requête.

String uriStr = @"http://api.webepartners.pl/wydawca/Authorize?login=" 
    + HttpUtility.UrlEncode(userName) + "&password=" + HttpUtility.UrlEncode(passsword); 
Uri address = new Uri(uriStr); 
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 

// Get response 
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) // error 
{ 
    // Get the response stream 
    StreamReader reader = new StreamReader(response.GetResponseStream()); 
} 

..... .....

GET http://api.webepartners.pl/wydawca/Authorize?from=2012-07-29%2013:47:05 HTTP/1.1 
Content-Type: text/xml; encoding='utf-8' 
Host: api.webepartners.pl 
Cookie: .ASPXAUTH=7521F26EBCE8CE487C6860C5E98248B540E5591BD6AE7EC936ECE29B0912AC49C71837B98D7972ABA9C868F18A0C6FCD1EB38B22BE86DBCCCDF8D56D0440170FECF497FF00A1B5D7B268EF6DF27B2B9DB806291E517654A136EC5617A67182DB3E3ECF0D8ADA6F3927C2F955A92E20B7BF7AE6D7DAE2AED0B0D9A7BD406C2CF4 


HTTP/1.1 403 Forbidden 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: text/html 
Expires: -1 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Sun, 29 Jul 2012 11:47:03 GMT 
Content-Length: 1233 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
<title>403 - Forbidden: Access is denied.</title> 
<style type="text/css"> 
<!-- 
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;} 
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;} 
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; 
background-color:#555555;} 
#content{margin:0 0 0 2%;position:relative;} 
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;} 
--> 
</style> 
</head> 
<body> 
<div id="header"><h1>Server Error</h1></div> 
<div id="content"> 
<div class="content-container"><fieldset> 
    <h2>403 - Forbidden: Access is denied.</h2> 
    <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3> 
</fieldset></div> 
</div> 
</body> 
</html> 

Ca y est?

+0

Ok, ça marche. Mais maintenant je dois obtenir l'information suivante: http: //api.webepartners.pl/wydawca/Auctions? From = date. Donc je dois créer une deuxième requête? Quoi avec autorisation? – Robert

+0

Je n'ai plus de documentation. Je crée des cookies CookieContainer = new CookieContainer(); et attribuez-le à myHttpWebRequest.CookieContainer = cookies; Je peux voir que le cookie est ajouté, puis je crée myHttpWebRequest1 avec une nouvelle URL et assène myHttpWebRequest1.CookieContainer = cookies; mais quand j'appelle HttpWebResponse myHttpWebResponse1 = (HttpWebResponse) myHttpWebRequest1.GetResponse(); J'ai une erreur: ... Interdit. L'authentification est donc incorrecte. – Robert

+0

Selon les informations fournies, il est difficile de dire où se situe le problème. Pouvez-vous utiliser un moniteur réseau pour tracer la communication entre le client et le serveur et afficher les demandes et les réponses transmises? – Codo

1

Cet url http://api.webepartners.pl/wydawca/Authorize?login=test&password=pass a une chaîne de requête. Étant donné que les valeurs de chaîne de requête ne sont pas utilisées pendant un POST, vous devriez peut-être essayer un GET à la place? Il serait logique que le verbe HTTP que vous utilisez soit incorrect avec une erreur 405.

Questions connexes