web-dev-qa-db-fra.com

Comment simuler POST demande?

Je teste sur Windows en essayant de simuler des demandes POST (avec différentes variables de formulaire) pour les tests de charge. J'ai essayé toutes sortes de logiciels de test de charge mais je n'ai pas réussi à le faire fonctionner.

Pour les demandes GET, je sais que je peux simplement mettre des paramètres derrière l'URL

http://www.example.com?id=yyy&t=zzz

Mais comment simuler une requête POST?

J'ai un client chrome REST mais je ne sais pas quoi mettre dans les en-têtes et les données.

Voici ce que j'ai essayé jusqu'à présent:

class Program
    {
        static void Main(string[] args)
        {

            string viewstateid = "/wEPDwUKLTY3NjEyMzE4NWRkK4DxZpjTmZg/RGCS2s13vkEWmwWiEE6v+XrYoWVuxeg=";
            string eventid ="/wEdAAoSjOGPZYAAeKGjkZOhQ+aKHfOfr91+YI2XVhP1c/pGR96FYSfo5JULYVvfQ61/Uw4pNGL67qcLo0vAZTfi8zd7jfuWZzOhk6V/gFA/hhJU2fx7PQKw+iST15SoB1LqJ4UpaL7786dp6laCBt9ubQNrfzeO+rrTK8MaO2KNxeFaDhrQ0hxxv9lBZnM1SHtoODXsNUYlOeO/kawcn9fX0BpWN7Brh7U3BIQTZwMNkOzIy+rv+Sj8XkEEA9HaBwlaEjg=";

            string username = "user1";
            string password = "ttee";

            string loginbutton = "Log In";

            string URLAuth = "http://localhost/login.aspx";
            string postString = string.Format("VIEWSTATE={0}&EVENTVALIDATION={1}&LoginUser_UserName={2}&LoginUser_Password={3}&LoginUser_LoginButton={4}",viewstateid,eventid, username, password,realm,otp,loginbutton);

            const string contentType = "application/x-www-form-urlencoded";
            System.Net.ServicePointManager.Expect100Continue = false;

            CookieContainer cookies = new CookieContainer();
            HttpWebRequest webRequest = WebRequest.Create(URLAuth) as HttpWebRequest;
            webRequest.Method = "POST";
            webRequest.ContentType = contentType;
            webRequest.CookieContainer = cookies;
            webRequest.ContentLength = postString.Length;
            webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1";
            webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

           webRequest.Referer = "http://localhost/login.aspx";

            StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
            requestWriter.Write(postString);
            requestWriter.Close();

            StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
            string responseData = responseReader.ReadToEnd();
            Console.WriteLine(responseData);
            responseReader.Close();
            webRequest.GetResponse().Close();

        }
    }
27
user1663380

Il serait utile que vous fournissiez plus d’informations - par exemple, le système d'exploitation que vous utilisez, ce que vous voulez accomplir, etc. Mais, généralement, cURL est un outil de ligne de commande très puissant que j'utilise fréquemment (sous Linux) pour imiter des requêtes HTML:

Par exemple:

curl --data "post1=value1&post2=value2&etc=valetc" http://Host/resource

OU, pour une API RESTful:

curl -X POST -d @file http://Host/resource

Vous pouvez consulter plus d'informations ici-> http://curl.haxx.se/


EDITs:

D'ACCORD. Donc, fondamentalement, vous cherchez à soumettre votre serveur REST à un test de stress? Alors, cURL n’est vraiment pas utile si vous ne voulez pas écrire votre propre programme de test de charge, même dans ce cas, les sockets seraient la solution. Je vous suggère de vérifier Gatling . La documentation de Gatling explique comment configurer l'outil. À partir de là, vous pouvez exécuter toutes sortes de requêtes GET, POST, PUT et DELETE. 

Malheureusement, à moins d’écrire votre propre programme - c’est-à-dire de générer un grand nombre de threads et d’inonder votre serveur REST de différents types de demandes - vous devez vraiment vous fier à une boîte à outils de test de charge/charge. Le simple fait d'utiliser un client REST pour envoyer des demandes ne va pas alourdir votre serveur.


Plus d'EDITs

Ainsi, pour simuler une demande de publication sur un socket, vous devez en principe établir la connexion de socket initiale avec le serveur. Je ne suis pas un gars C #, je ne peux donc pas vous dire exactement comment faire cela; Je suis sûr qu'il existe 1001 tutoriels de socket C # sur le Web. Avec la plupart des API RESTful, vous devez généralement fournir un URI pour indiquer au serveur ce qu'il doit faire. Par exemple, supposons que votre API gère une bibliothèque et que vous utilisez une demande POST] pour indiquer au serveur de mettre à jour les informations relatives à un livre dont l'identifiant est '34'. Votre URI pourrait être 

http://localhost/library/book/34

Par conséquent, vous devez ouvrir une connexion sur localhost sur le port 80 (ou 8080, ou sur le port de votre serveur), et transmettre un en-tête de requête HTML. En reprenant l'exemple de bibliothèque ci-dessus, l'en-tête de votre requête pourrait ressembler à ceci:

POST library/book/34 HTTP/1.0\r\n
X-Requested-With: XMLHttpRequest\r\n
Content-Type: text/html\r\n
Referer: localhost\r\n
Content-length: 36\r\n\r\n
title=Learning+REST&author=Some+Name

À partir de là, le serveur doit récupérer un en-tête de réponse, suivi de l’API programmée pour informer le client - en général, quelque chose pour dire que POST a réussi ou échoué. Pour stresser votre API, vous devez essentiellement le faire encore et encore en créant un processus threadé.

De plus, si vous publiez des données JSON, vous devrez modifier votre en-tête et votre contenu en conséquence. Franchement, si vous cherchez à faire cela rapidement et proprement, je suggérerais d'utiliser python (ou Perl) qui possède plusieurs bibliothèques pour créer des requêtes POST, PUT, GET et DELETE, ainsi que des données POST et PUT JSON. Sinon, vous risquez de faire plus de programmes que de tests de résistance. J'espère que cela t'aides!

18
CRK

Postman est la meilleure application pour tester vos API!

Vous pouvez importer ou exporter vos itinéraires et le laisser se souvenir de toutes vos demandes de corps! :)


_ { https://chrome.google.com/webstore/detail/postman-rest-client-packa/fhbjgbiflinjbdggehcddcbncdddomop }

9
Luna

Une méthode simple consiste à utiliser curl à partir de la ligne de commande, par exemple:

DATA="foo=bar&baz=qux"
curl --data "$DATA" --request POST --header "Content-Type:application/x-www-form-urlencoded" http://example.com/api/callback | python -m json.tool

ou voici un exemple d'envoi d'une demande brute POST à l'aide de Bash Shell (demande JSON):

exec 3<> /dev/tcp/example.com/80

DATA='{"email": "[email protected]"}'
LEN=$(printf "$DATA" | wc -c)

cat >&3 << EOF
POST /api/retrieveInfo HTTP/1.1
Host: example.com
User-Agent: Bash
Accept: */*
Content-Type:application/json
Content-Length: $LEN
Connection: close

$DATA
EOF

# Read response.
while read line <&3; do
   echo $line
done
5
kenorb

Cela devrait vous aider si vous avez besoin d’un site Web publiquement exposé mais que vous êtes sur un PC de développement. Pour répondre également (je ne peux pas commenter pour le moment): "Comment puis-je publier sur un serveur de développement interne uniquement avec cela? - stryba"

NGROK crée une URL publique sécurisée vers un serveur Web local sur votre ordinateur de développement (URL permanentes disponibles moyennant un supplément, temporaires gratuitement).
1) Exécutez ngrok.exe pour ouvrir la ligne de commande (sur le bureau)
2) Tapez ngrok.exe http 80 pour démarrer un tunnel, 
3) testez en naviguant jusqu’à l’adresse Web affichée qui transmettra et affichera la page 80 locale par défaut sur votre ordinateur de développement

Ensuite, utilisez certains des outils recommandés ci-dessus pour POST sur votre site ngrok (' https://xxxxxx.ngrok.io ') pour tester votre code local. 

https://ngrok.com/ngrok

0
user6923055

N'oubliez pas d'ajouter l'agent de l'utilisateur, car un serveur bloquera la demande s'il n'y a pas d'agent de serveur. 

curl -X POST -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' -d "field=acaca&name=afadxx" https://example.com
0
navotera