読者です 読者をやめる 読者になる 読者になる

chromeでXMLHttpRequestするとき

chromeでローカル環境からweb上のデータをXMLHttpRequestで拾いたいなーとおもってやってみたけど

Cross origin requests are only supported for HTTP
とか
Origin http://(ドメイン)/ is not allowed by Access-Control-Allow-Origin.
とか出て困った。

どうやら前者は「ローカルからアクセスしていいのは自分自身だけだぜHAHAHA」ということらしい。
後者は「Access-Control-Allow-Origin」というヘッダをサーバーで仕込まないといけないみたいです。クライアント側(XMLHttpRequest)ではこのヘッダーを付けてもpostしてもダメでした。(jQueryのメソッドでもダメだった)


今回はRubyでcgiを書いて、
クライアントでRubyのcgiにデータのっけてXMLHttpRequestRubyでヘッダセットしてpost → レスポンスをクライアント側に返す
とすればなんとかいけました。

404 Blog Not Found:Ajax - Goodbye, JSONP. Hello, Access-Control-Allow-Origin
こうすればいいらしいのですがどう使うのかぼくの今のレベルではワカラナイヨ……



一応Rubyのコード(初めてRubyで実用できるの書いよ!)
tumblrのdashboardの内容が欲しかったのです。

#!ruby

require 'cgi'
require 'net/http'
require 'uri'

cgi = CGI.new
uri = URI.parse('http://www.tumblr.com/api/dashboard')
http = Net::HTTP.new(uri.host, uri.port)
header = {"Access-Control-Allow-Origin" => "*"}
body = "email=#{cgi["email"]}&password=#{cgi["password"]}"
response = http.post(uri.path, body, header)

puts "Content-Type: text/html\n\n"
puts response.body

tumblr api参考
チラシの裏 — Tumblr APIの使い方を勝手に和訳したもの Tumblr,...

これでxmlがとれたので明日はパースして整形してみよう。