add logging
This commit is contained in:
parent
4aa26122d5
commit
1de702cd93
@ -87,6 +87,14 @@ This method is from [lexbor](https://github.com/kostya/lexbor), so if you want t
|
|||||||
puts page.css("h1").first.inner_text
|
puts page.css("h1").first.inner_text
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Logging
|
||||||
|
|
||||||
|
For activation, simply setup the log to `:debug` level
|
||||||
|
|
||||||
|
```crystal
|
||||||
|
Log.setup("mechanize", :debug)
|
||||||
|
```
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
1. Fork it (<https://github.com/Kanezoh/mechanize.cr/fork>)
|
1. Fork it (<https://github.com/Kanezoh/mechanize.cr/fork>)
|
||||||
|
18
spec/log_spec.cr
Normal file
18
spec/log_spec.cr
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
require "./spec_helper"
|
||||||
|
require "log/spec"
|
||||||
|
|
||||||
|
describe "Mechanize logging" do
|
||||||
|
it "emit logs" do
|
||||||
|
Log.capture("mechanize") do |logs|
|
||||||
|
agent = Mechanize.new
|
||||||
|
agent.user_agent = "Firefox"
|
||||||
|
page = agent.get("http://example.com/form")
|
||||||
|
|
||||||
|
logs.check(:debug, "GET: http://example.com/form")
|
||||||
|
logs.check(:debug, "request-header: User-Agent => Firefox")
|
||||||
|
logs.check(:debug, "status: HTTP/1.1 200 OK")
|
||||||
|
logs.check(:debug, "response-header: Content-length => 291")
|
||||||
|
logs.check(:debug, "response-header: Connection => close")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,3 +1,4 @@
|
|||||||
|
require "log"
|
||||||
require "uri"
|
require "uri"
|
||||||
require "http/client"
|
require "http/client"
|
||||||
require "lexbor"
|
require "lexbor"
|
||||||
@ -32,6 +33,7 @@ require "./mechanize/errors/*"
|
|||||||
# ```
|
# ```
|
||||||
class Mechanize
|
class Mechanize
|
||||||
VERSION = "0.2.0"
|
VERSION = "0.2.0"
|
||||||
|
Log = ::Log.for(self)
|
||||||
|
|
||||||
USER_AGENT = {
|
USER_AGENT = {
|
||||||
"Mechanize" => "Mechanize/#{VERSION} Crystal/#{Crystal::VERSION} (https://github.com/Kanezoh/mechanize.cr)",
|
"Mechanize" => "Mechanize/#{VERSION} Crystal/#{Crystal::VERSION} (https://github.com/Kanezoh/mechanize.cr)",
|
||||||
@ -250,6 +252,9 @@ class Mechanize
|
|||||||
cur_page = form.page || (current_page unless history.empty?)
|
cur_page = form.page || (current_page unless history.empty?)
|
||||||
|
|
||||||
request_data = form.request_data
|
request_data = form.request_data
|
||||||
|
|
||||||
|
Log.debug { "query: #{request_data.inspect}" }
|
||||||
|
|
||||||
content_headers = ::HTTP::Headers{
|
content_headers = ::HTTP::Headers{
|
||||||
"Content-Type" => form.enctype,
|
"Content-Type" => form.enctype,
|
||||||
"Content-Length" => request_data.size.to_s,
|
"Content-Length" => request_data.size.to_s,
|
||||||
|
@ -32,6 +32,7 @@ class Mechanize
|
|||||||
response = http_request(uri, method, params)
|
response = http_request(uri, method, params)
|
||||||
body = response.not_nil!.body
|
body = response.not_nil!.body
|
||||||
page = response_parse(response, body, uri)
|
page = response_parse(response, body, uri)
|
||||||
|
response_log(response)
|
||||||
# save cookies
|
# save cookies
|
||||||
save_response_cookies(response, uri, page)
|
save_response_cookies(response, uri, page)
|
||||||
|
|
||||||
@ -46,6 +47,8 @@ class Mechanize
|
|||||||
redirect_url = response.headers["location"]
|
redirect_url = response.headers["location"]
|
||||||
uri = resolve_url(redirect_url, referer)
|
uri = resolve_url(redirect_url, referer)
|
||||||
|
|
||||||
|
Log.debug { "follow redirect to: #{uri.to_s}" }
|
||||||
|
|
||||||
# Make sure we are not copying over the POST headers from the original request
|
# Make sure we are not copying over the POST headers from the original request
|
||||||
headers.delete("Content-MD5")
|
headers.delete("Content-MD5")
|
||||||
headers.delete("Content-Type")
|
headers.delete("Content-Type")
|
||||||
@ -56,6 +59,8 @@ class Mechanize
|
|||||||
|
|
||||||
# send http request
|
# send http request
|
||||||
private def http_request(uri, method, params) : ::HTTP::Client::Response?
|
private def http_request(uri, method, params) : ::HTTP::Client::Response?
|
||||||
|
request_log(uri, method)
|
||||||
|
|
||||||
case uri.scheme.not_nil!.downcase
|
case uri.scheme.not_nil!.downcase
|
||||||
when "http", "https"
|
when "http", "https"
|
||||||
case method
|
case method
|
||||||
@ -206,6 +211,7 @@ class Mechanize
|
|||||||
private def save_cookies(uri, header_cookies)
|
private def save_cookies(uri, header_cookies)
|
||||||
host = uri.host
|
host = uri.host
|
||||||
header_cookies.each do |cookie|
|
header_cookies.each do |cookie|
|
||||||
|
Log.debug { "saved cookie: #{cookie.name}=#{cookie.value}" }
|
||||||
cookie.origin = host
|
cookie.origin = host
|
||||||
request_cookies << cookie
|
request_cookies << cookie
|
||||||
end
|
end
|
||||||
@ -220,6 +226,26 @@ class Mechanize
|
|||||||
end
|
end
|
||||||
valid_cookies
|
valid_cookies
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private def request_log(uri, method)
|
||||||
|
Log.debug { "#{method.to_s.upcase}: #{uri.to_s}" }
|
||||||
|
|
||||||
|
request_headers.each do |key, values|
|
||||||
|
value = values.size == 1 ? values.first : values
|
||||||
|
Log.debug { "request-header: #{key} => #{value}" }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private def response_log(response)
|
||||||
|
return unless response
|
||||||
|
|
||||||
|
Log.debug { "status: #{response.version} #{response.status_code} #{response.status_message}" }
|
||||||
|
|
||||||
|
response.headers.each do |key, values|
|
||||||
|
value = values.size == 1 ? values.first : values
|
||||||
|
Log.debug { "response-header: #{key} => #{value}" }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user