Я пытался написать сценарий, который может помочь мне комментировать из командной строки. (Единственная причина, по которой я хочу это сделать, - это время отпуска здесь, и я хочу убить время). Я часто бываю и нахожусь на this site. Так что я начинаю с этого сайта. Например прокомментировать this post Я использовал следующий сценарийRuby script для размещения комментариев
require "uri"
require 'net/http'
def comment()
response = Net::HTTP.post_form(URI.parse("http://www.geeksforgeeks.org/wp-comments-post.php"),{'author'=>"pikachu",'email'=>"[email protected]",'url'=>"geekinessthecoolway.blogspot.com",'submit'=>"Have Your Say",'comment_post_ID'=>"18215",'comment_parent'=>"0",'akismet_comment_nonce'=>"70e83407c8",'bb2_screener_'=>"1330701851 117.199.148.101",'comment'=>"How can we generalize this for a n-ary tree?"})
return response.body
end
puts comment()
Очевидно, что значения не были зашиты, но ради clearity и поддержания цели поста я их жестко прописывать. Помимо обычных полей, которые появляются в форме, значения для скрытых полей, которые я узнал из wirehark, когда я отправил комментарий обычным способом. Я не могу понять, что мне не хватает. Может быть, какое-то событие js?
Edit: Как мало кто предложил использовать механизировать я переключился на python.Now мой обновленный код выглядит следующим образом:
import sys
import mechanize
uri = "http://www.geeksforgeeks.org/"
request = mechanize.Request(mechanize.urljoin(uri, "archives/18215"))
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()
form=forms[0]
print form
control = form.find_control("comment")
#control=form.find_control("bb2_screener")
print control.disabled
# ...or readonly
print control.readonly
# readonly and disabled attributes can be assigned to
#control.disabled = False
form.set_all_readonly(False)
form["author"]="Bulbasaur"
form["email"]="[email protected]"
form["url"]="9gag.com"
form["comment"]="Y u no put a captcha?"
form["submit"]="Have Your Say"
form["comment_post_ID"]="18215"
form["comment_parent"]="0"
form["akismet_comment_nonce"]="d48e588090"
#form["bb2_screener_"]="1330787192 117.199.144.174"
request2 = form.click()
print request2
try:
response2 = mechanize.urlopen(request2)
except mechanize.HTTPError, response2:
pass
# headers
for name, value in response2.info().items():
if name != "date":
print "%s: %s" % (name.title(), value)
print response2.read() # body
response2.close()
Теперь сервер возвращает меня this .На происходит через HTML код оригинала страница i обнаружила, что есть еще одно поле bb2_screener, которое нужно заполнить, если я хочу притворяться браузером на сервере. Но проблема в том, что поле не написано внутри тега, поэтому механизация не будет рассматривать его как поле.
Лучше использовать HTTP-прокси вместо проводов для проверки HTTP-трафика. Я использую [Charles] (http://charlesproxy.com), но есть встроенный инструмент в Chrome, а Firefox - Firebug. При этом вы, вероятно, забыли отправить cookie вместе с запросом. –
Странно, что вы цитируете механизацию как повод переключиться с Руби. Ruby имеет [mechanize] (http://mechanize.rubyforge.org/), и это особенно хорошая реализация (и я использовал механизацию как в python, так и в perl). –
ну, я не знал о механизме, поэтому первое, что я сделал, это google it. Первая доступная ссылка была основана на python. И мне комфортно с любым из этих языков. Итак, коммутатор :) BTW, когда я отважился на механизацию больше я нашел библиотеки для perl и ruby тоже. Но в конце язык - это просто оружие, его программист, который сражается с битвой :) – bashrc