¿Cómo puedo acceder a HTTPS usando ip directa sin editar / etc / hosts en iOS?

De forma pnetworkingeterminada, example.com resuelve en 123.123.123.123 ,

Pero si quiero que se resuelva a 100.100.100.100 .

Para http, simplemente puedo cambiar la URL a http://100.100.100.100 con un encabezado "Host: example.com".

Pero no funciona para HTTPS. (Error: problema del certificate SSL: Cadena de certificates no válida).

Mi pregunta no es por qué, y no quiero omitir la validation del certificate.

¿Cómo puedo get el mismo efecto en Objective-C como curl's

--resolve opción:

 --resolve <host:port:address> Provide a custom address for a specific host and port pair. Using this, you can make the curl requests(s) use a specified address and prevent the otherwise normally resolved address to be used. Consider it a sort of /etc/hosts alternative provided on the command line. The port number should be the number used for the specific protocol the host will be used for. It means you need several entries if you want to provide address for the same host but different ports. 

En otras palabras, ¿Cómo hacer una consulta DNS personalizada en requestes HTTPS en Objective-C?

Cuando utiliza https, debe aceptar la dirección que usa en su request y la dirección que le dio el certificate devuelto por el server.

Si envía una request a https://100.100.100.100 , el server debe devolver un certificate para 100.100.100.100. Incluso si se conectó correctamente a https: // http://www.xyz.com, y http://www.xyz.com se resolvió a 100.100.100.100, conectarse a https://100.100.100.100 no va a funcionar, no puede funcionar y absolutamente debe no funciona, porque el server devolverá un certificate para http://www.xyz.com y no para 100.100.100.100.

Veo las siguientes opciones:

  • Use su propio server DNS con la configuration correspondiente de la input del host / ip
  • Si desea seguir con el Objetivo C, existe una directriz de Apple que invalida la validation de la cadena SSL correctamente.
  • Use libcurl que admite la function que mencionó: http://curl.haxx.se/libcurl/c/resolve.html

ejemplo

 #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *host = NULL; /* Each single name resolve string should be written using the format HOST:PORT:ADDRESS where HOST is the name libcurl will try to resolve, PORT is the port number of the service where libcurl wants to connect to the HOST and ADDRESS is the numerical IP address */ host = curl_slist_append(NULL, "example.com:80:127.0.0.1"); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_RESOLVE, host); curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); res = curl_easy_perform(curl); /* always cleanup */ curl_easy_cleanup(curl); } curl_slist_free_all(host); return (int)res; 

}

Actualización: dado que el autor no quiere omitir la validation de certificates, esta no es una opción ahora:

Puede intentar ignorar el certificate ssl en AFNetworking en su caso

Quiero permitir certificates SSL no válidos con AFNetworking