My favorites | Português | Sign in

Visão geral da API de obtenção de URL em Java

Os aplicativos do Google App Engine podem se comunicar com outros aplicativos ou acessar outros recursos da web através da obtenção de URLs. Um aplicativo pode usar o serviço de obtenção de URL para emitir solicitações HTTP e HTTPS e receber respostas. O serviço de obtenção de URL usa a infraestrutura de rede do Google para proporcionar eficiência e escalabilidade.

Como obter URLs com java.net

Você pode usar java.net.URLConnection e classes relacionadas da biblioteca Java padrão para fazer conexões HTTP e HTTPS a partir do seu aplicativo Java. O Google App Engine implementa essa interface usando o serviço de obtenção de URL. O seu aplicativo não faz conexões de soquete diretamente.

Uma forma simples de obter o conteúdo de uma página em um URL é criar um objeto java.net.URL e, em seguida, chamar o seu método openStream(). O método lida com os detalhes de criação da conexão, emitindo uma solicitação HTTP GET e recuperando os dados da resposta.

import java.net.MalformedURLException;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

// ...
        try {
            URL url = new URL("http://www.example.com/atom.xml");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;

            while ((line = reader.readLine()) != null) {
                // ...
            }
            reader.close();

        } catch (MalformedURLException e) {
            // ...
        } catch (IOException e) {
            // ...
        }

Para solicitações mais sofisticadas, chame o método openConnection() do objeto do URL para obter um objeto URLConnection (HttpURLConnection ou HttpsURLConnection, dependendo do URL). Você pode preparar esse objeto com informações adicionais antes de emitir a solicitação. Consulte Como usar java.net.

Como fazer solicitações

Um aplicativo pode obter um URL usando HTTP (normal) ou HTTPS (seguro). O URL especifica o esquema a ser usado: http://... ou https://...

O URL deve usar as portas padrão para HTTP (80) e HTTPS (443). A porta fica implícita pelo esquema, mas também pode ser mencionada no URL contanto que a porta seja o padrão para o esquema (https://...:443/). Um aplicativo não pode se conectar a uma porta arbitrária de um host remoto, nem pode usar uma porta diferente da padrão para um esquema.

A obtenção pode usar qualquer um dos seguintes métodos HTTP: GET (comum para solicitação de páginas web e de dados), POST (comum para o envio de formulários da web), PUT, HEAD e DELETE. A obtenção pode incluir cabeçalhos de solicitação HTTP e uma carga útil (corpo de uma solicitação HTTP).

O serviço de obtenção de URL usa um proxy compatível com HTTP/1.1 para obter o resultado.

Para impedir que um aplicativo cause uma recursão infinita de solicitações, um manipulador de solicitação não tem permissão para obter o seu próprio URL. Ainda é possível causar uma recursão infinita por outros meios, por isso tenha cuidado se for possível usar o seu aplicativo para obter solicitações de URLs fornecidos pelo usuário.

A chamada para o serviço de obtenção de URL é síncrona e não retornará até que o serviço receba uma resposta do host remoto. O temporizador de solicitação do seu aplicativo pode passar antes de o host remoto responder. Não há como cancelar a solicitação após a sua emissão.

Conexões seguras e HTTPS

Um aplicativo pode obter um URL com o método HTTPS para se conectar a servidores seguros. Os dados da solicitação e da resposta são transmitidos pela rede na forma criptografada.

O proxy usado pelo serviço de obtenção de URL não pode autenticar o host com o qual está entrando em contato. Como não há uma cadeia de confiança de certificados, o proxy aceita todos os certificados, incluindo os certificados autoassinados. O servidor proxy não consegue detectar ataques de interceptação entre o Google App Engine e o host remoto ao usar HTTPS.

Cabeçalhos de solicitação

Um aplicativo pode definir cabeçalhos HTTP para a solicitação de saída.

Se o cabeçalho Content-Type não for definido explicitamente ao enviar uma solicitação HTTP POST, ele será definido para x-www-form-urlencoded. Este é o tipo de conteúdo usado pelos formulários da web.

Por motivos de segurança, os cabeçalhos abaixo não podem ser modificados pelo aplicativo:

  • Content-Length
  • Host
  • Referer
  • Vary
  • Via
  • X-Forwarded-For

Esses cabeçalhos são definidos com valores precisos pelo Google App Engine, conforme apropriado. Por exemplo, o Google App Engine calcula o cabeçalho Content-Length a partir dos dados de solicitação e o adiciona à solicitação antes do envio.

Respostas

O serviço de obtenção de URL retorna todos os dados de resposta, incluindo o código, o cabeçalho e o corpo da resposta.

Por padrão, se o serviço de obtenção de URL receber uma resposta com um código de redirecionamento, o serviço seguirá o redirecionamento. O serviço seguirá até 5 respostas de redirecionamento e retornará o recurso final. Você pode usar a API para informar ao serviço de obtenção de URL que não siga os redirecionamentos e apenas retorne uma resposta de redirecionamento para o aplicativo.

Por padrão, se a resposta recebida exceder o limite máximo de tamanho de resposta, ela ficará truncada. Você pode usar a API para que o serviço gere uma exceção quando a resposta exceder o tamanho máximo. (Veja abaixo o valor desse limite).

Como entrar em contato com os hosts atrás do firewall da sua empresa

O seu aplicativo pode se conectar aos sistemas atrás do firewall da sua empresa usando o Google Secure Data Connector (SDC). Com o SDC Agent configurado na sua rede, os aplicativos do Google App Engine em execução no domínio do seu Google Apps podem autenticar com o Agent e acessar URLs na sua intranet. O SDC Agent garante que apenas os seus aplicativos podem se conectar à sua intranet, e o farão apenas para usuários conectados com uma conta do Google Apps no seu domínio.

O seu aplicativo pode acessar um URL de intranet usando o serviço de obtenção de URL. O aplicativo inclui um cabeçalho especial com uma solicitação declarando que a solicitação é destinada ao seu SDC Agent. O cabeçalho tem um nome use_intranet e um valor yes. Nenhuma outra alteração é necessária; a verificação do usuário, autenticação e a conexão segura são realizadas automaticamente.

Veja a seguir um exemplo de como usar a obtenção de URL com o cabeçalho use_intranet, usando a interface java.net.HttpURLConnection:

import java.net.HttpURLConnection;
import java.net.URL;

// ...
        URL url = new URL("http://www.corp.example.com/sales.csv");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("use_intranet", "true");

Para obter mais informações, consulte o site do Google Secure Data Connector.

Obtenção de URL e o servidor de desenvolvimento

Quando o seu aplicativo está em execução no servidor de desenvolvimento no seu computador, as chamadas para o serviço de obtenção de URL são tratadas localmente. O servidor de desenvolvimento obtém URLs entrando em contato com hosts remotos diretamente do seu computador, usando qualquer configuração de rede que o seu computador estiver usando para acessar a internet.

Ao testar os recursos de obtenção de URLs do seu aplicativo, verifique se o seu computador pode acessar os hosts remotos.

Se o seu aplicativo estiver usando o Google Secure Data Connector para acessar URLs na sua intranet, teste-o enquanto estiver conectado à sua intranet atrás do firewall. Ao contrário do Google App Engine, o servidor de desenvolvimento não usa o SDC Agent para resolver URLs da intranet. Apenas o Google Apps e o Google App Engine podem autenticar com o seu SDC Agent.

Cotas e limites

Cada solicitação de obtenção de URL é computada para a cota de Chamadas da API de obtenção de URL.

Os dados enviados em uma solicitação HTTP ou HTTPS usando o serviço de obtenção de URL são computados para as seguintes cotas:

  • Largura de banda de saída (ajustável)
  • Dados enviados para a obtenção de URL

Além dessas cotas, os dados enviados em uma solicitação HTTPS também são computados para a seguinte cota:

  • Largura de banda de saída segura (ajustável)

Os dados recebidos em resposta a uma solicitação HTTP ou HTTPS usando o serviço de obtenção de URL são computados para as seguintes cotas:

  • Largura de banda de entrada (ajustável)
  • Dados recebidos da obtenção de URL

Além dessas cotas, os dados recebidos em resposta a uma solicitação HTTPS também são computados para a seguinte cota:

  • Largura de banda de entrada segura (ajustável)

Para obter mais informações sobre cotas, consulte Quotas (Cotas) e a seção "Quota Details" (Quota Details) do Console de administração.

Além das cotas, os seguintes limites são aplicados ao uso do serviço de obtenção de URL:

Limite Quantidade
tamanho da solicitação 1 megabyte
tamanho da resposta 1 megabyte