[RUBY] J'ai essayé un puzzle qui ne peut être résolu que par les 10% de mauvais ingénieurs

Un puzzle comme celui du titre était populaire il y a quelques années. Je l'ai trouvé, alors je l'ai contesté.

Puzzle

Tout d'abord, essayez de taper directement dans le navigateur. http://challenge-your-limits.herokuapp.com/call/me Puis, le texte suivant est revenu.

{"message":"Almost! It's not GET. Keep trying."}

J'ai entendu dire que ce n'est pas GET, donc Demandons par POST.

Vous pouvez le faire avec curl, mais cette fois je vais essayer de faire une demande avec Ruby.

require 'net/http'
uri = URI.parse('http://challenge-your-limits.herokuapp.com/call/me')
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path)
response = http.request(req)
puts response.body
#=>{"message":"Great! Please register as /challenge_users"}

Le succès et le prochain défi Tout d'abord, changez le chemin et demandez tel quel.

require 'net/http'
uri = URI.parse('http://challenge-your-limits.herokuapp.com/challenge_users')
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path)
response = http.request(req)
puts response.body
#=>{"message":"Validation Error, [:name, \"can't be blank\"]"}

J'ai été chargé de passer les paramètres. Puisqu'il s'agit de POST, les données sont placées dans le corps de la requête.

require 'net/http'
require 'json'
params = {
   name: 'hogehoge'
}
uri = URI.parse('http://challenge-your-limits.herokuapp.com/challenge_users')
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path)
req.body = params.to_json
response = http.request(req)
puts response.body
#=> {"message":"Validation Error, [:name, \"can't be blank\"]"}

cette? Je ne peux pas passer les paramètres, Contemplation d'ici et mise en conserve. Lol

La cause était que j'ai mis les paramètres au format json dans le corps de la requête. Je regrette d'avoir pensé que le corps était json ...

La bibliothèque Net :: HTTP :: Post a une méthode pratique appelée set_form_data, qui Si vous passez le hachage comme argument, le paramètre sera placé dans le corps sous forme de chaîne de caractères.

require 'net/http'
params = {
   name: 'hogehoge'
}
#réduction
req.set_form_data(params)
puts req.body
#=> name=hogehoge
puts req.body.class
#=>  String

Et éditer

require 'net/http'
params = {
   name: 'hogehoge'
}
uri = URI.parse('http://challenge-your-limits.herokuapp.com/challenge_users')
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path)
req.set_form_data(params)
response = http.request(req)
puts response.body
#=> {"message":"Validation Error, [:email, \"can't be blank\"]"}

Vous ne pouvez pas spécifier de paramètres pour toujours, non? Ajouter un e-mail comme indiqué

require 'net/http'
params = {
   name: 'hogehoge',
   email: '[email protected]'
}
uri = URI.parse('http://challenge-your-limits.herokuapp.com/challenge_users')
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path)
req.set_form_data(params)
response = http.request(req)
puts response.body
#=> {"message":"Validation Error, [:email, \"is already taken\"]"}

uniq: en se demandant si c'est vrai J'ai entré une autre adresse et cela a réussi.

{"message":"Thanks! Please access to http://challenge-your-limits.herokuapp.com/challenge_users/token/**********  from your web browser."}

C'était une bonne occasion de reconfirmer ma position, en disant que je suis toujours dans les 10% inférieurs. Maintenant que j'ai les connaissances nécessaires pour insérer des paramètres de requête concernant POST, je pense que c'est un pas en avant.

Dédié chaque jour.

Recommended Posts

J'ai essayé un puzzle qui ne peut être résolu que par les 10% de mauvais ingénieurs
Description qui le rend accessible uniquement aux affiches
Un grattage de la météo passée que l'on peut voir sur le site de l'Agence météorologique
J'ai essayé JAX-RS et pris note de la procédure
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
J'ai posé une question qui peut être utilisée pour des entretiens techniques
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
Installation de Mecab qui peut se faire presque en tapant une commande
J'ai essayé de résoudre les 10 dernières questions qui devraient être résolues après m'être inscrit auprès d'AtCoder en Java
J'ai essayé d'apprendre Java avec une série que les débutants peuvent comprendre clairement
J'ai séparé la même description qu'une méthode sous private dans le contrôleur Rails et je l'ai implémentée pour qu'elle puisse être appelée avec before_action
La version de développement de Ruby 3.0 a une fonction qui permet une attribution fractionnée par attribution de droits.
Je souhaite obtenir une liste de chaînes de caractères uniques uniquement en excluant les chaînes de caractères fixes du nom de fichier
Orienté objet qui peut être compris par les fées
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
J'ai essayé de comparer la technologie d'infrastructure des ingénieurs ces jours-ci avec la cuisine.
J'ai créé un client API THETA qui peut être utilisé pour le développement de plugins
Essayez d'enregistrer les données pouvant être lues par JavaFX au format PNG
[Incontournable pour les ingénieurs débutants] Une histoire que le monde s'est étendue lorsque j'ai exploité un service Web que j'ai créé moi-même
Représentez graphiquement les informations du capteur de Raspberry Pi et préparez un environnement qui peut être vérifié avec un navigateur Web
Collection RSpec que j'ai fréquemment utilisée
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
[Solution] Un mémo que j'ai eu du mal car le format de sinatra-validation a changé.
J'ai essayé d'étudier le mécanisme d'Emscripten en l'utilisant avec un solveur allemand
[VBA] J'ai créé un outil pour convertir le type primitif de la classe Entity générée par Hibernate Tools en type de référence correspondant.