Где я могу поместить данные аутентификации клиента REST в запрос? - PullRequest
0 голосов
/ 04 июля 2011

Мне нужно работать с REST API в Android-приложении, которое создается моим клиентом.Ниже текст только что скопирован из pdf, который нам предоставляет клиент.

-В этом примере создается новый пользователь.Части возможного запроса к серверу показаны ниже:

Содержание части сообщения

Header POST {url-prefix}/rest/user
Content-Type: application/xml
Content-Length: 205
Body <request>
  <client>
    <id>XY</id>
    <name>myName</name>
    <password>myPassword</password>
  </client>
  <user>
    <name>myUserName</name>
    <password>myUserPassword</password>
    <groupId>12345</groupId>
  </user>
</request>

-После поиска и изучения я узнал, что возможный код запроса (на Java) может быть:

URL url=new URL("http://api.example.com/rest/user/?name=myUserName&password=myUserPassword&groupId=12345");
            HttpURLConnection conn=(HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("Post");
            OutputStreamWriter out=new OutputStreamWriter(conn.getOutputStream());
            out.write("respose content:");
            out.close();

Из руководства, которое они предоставляют, я узнал, для каждого запросасервер, клиент (то есть я) должен передать данные аутентификации. У меня вопрос: куда я помещаю данные аутентификации в строку запроса?Пожалуйста, помогите мне в этом.

Редактировать: После размещения приведенного ниже кода в качестве запроса:

            DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://api.example.com/rest/user/?name=Foysal&password=123456&groupid=12345");
            httpPost.addHeader("Accept", "text/xml");
            httpPost.setHeader("Content-Type","application/xml;charset=UTF-8");
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("name", "APIappDevAccount"));
            nameValuePairs.add(new BasicNameValuePair("password", "123456"));           
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpParams params = new BasicHttpParams();
            HttpConnectionParams.setStaleCheckingEnabled(params, false);
            HttpConnectionParams.setConnectionTimeout(params, 5000);
            HttpConnectionParams.setSoTimeout(params, 5000);
            httpClient.setParams(params);
            httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
            HttpResponse response = httpClient.execute(httpPost);
            InputStream is = response.getEntity().getContent();
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            byte[] buf;
            int ByteRead;
            buf = new byte[1024];
            String xmldata = null;
            double totalSize = 0;
            while ((ByteRead = is.read(buf, 0, buf.length)) != -1) {
                os.write(buf, 0, ByteRead);
                totalSize += ByteRead;                      
            }
            xmldata =  os.toString();
            os.close();
            is.close();

Но я получил ответ:

404 Не найдено

Не найдено

Запрошенный URL / rest / user / не был найден на этом сервере.


Apache / 2.2.6 (Fedora) DAV / 2 mod_ssl / 2.2.6 OpenSSL / 0.9.8b Сервер на api.example.com Порт 80

Ответы [ 2 ]

0 голосов
/ 04 июля 2011

Вы можете выполнить запрос POST, как показано здесь: http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient и поместить данные аутентификации в виде пар имя-значение:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

try {
    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("name", "myUserName"));
    nameValuePairs.add(new BasicNameValuePair("password", "myUserPassword"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);

} catch (Exception e) {
    // ... handle exception here
}
0 голосов
/ 04 июля 2011

Похоже, они хотят, чтобы вы поместили XML-документ и включили в него аутентификацию. Немного API REST (для большинства REST APIS не требуется документ XML).

Вам нужно использовать conn.getOutputStream () для отправки этого документа на сервер и использовать conn.getInputStream () для чтения ответа.

Таким образом, вам нужно создать документ XML, подобный тому, который они показывают:

<request>
  <client>
    <id>XY</id>
    <name>myName</name>
    <password>myPassword</password>
  </client>
  <user>
    <name>myUserName</name>
    <password>myUserPassword</password>
    <groupId>12345</groupId>
  </user>
</request>

А затем отправьте его на свой ПОЧТУ:

conn.setRequestProperty ( "Content-Type", "text/xml" );
out.write(requestDoc); //where requestDoc is the String containing the XML.
out.flush();
out.close();
...