httpclient 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/httpclient.rb +106 -28
- data/lib/httpclient/cookie.rb +2 -0
- metadata +4 -4
data/lib/httpclient.rb
CHANGED
@@ -15,6 +15,7 @@ require 'timeout'
|
|
15
15
|
require 'uri'
|
16
16
|
require 'socket'
|
17
17
|
require 'thread'
|
18
|
+
require 'stringio'
|
18
19
|
require 'digest/md5'
|
19
20
|
|
20
21
|
# Extra library
|
@@ -51,9 +52,9 @@ require 'httpclient/cookie'
|
|
51
52
|
#
|
52
53
|
class HTTPClient
|
53
54
|
|
54
|
-
VERSION = '2.1.
|
55
|
+
VERSION = '2.1.1'
|
55
56
|
RUBY_VERSION_STRING = "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
56
|
-
s = %w$Id: httpclient.rb
|
57
|
+
s = %w$Id: httpclient.rb 178 2007-08-28 13:47:27Z nahi $
|
57
58
|
RCS_FILE, RCS_REVISION = s[1][/.*(?=,v$)/], s[2]
|
58
59
|
|
59
60
|
SSLEnabled = begin
|
@@ -800,6 +801,8 @@ class SessionManager # :nodoc:
|
|
800
801
|
|
801
802
|
attr_accessor :ssl_config
|
802
803
|
|
804
|
+
attr_reader :test_loopback_http_response
|
805
|
+
|
803
806
|
def initialize
|
804
807
|
@proxy = nil
|
805
808
|
|
@@ -818,6 +821,7 @@ class SessionManager # :nodoc:
|
|
818
821
|
@read_block_size = 8192
|
819
822
|
|
820
823
|
@ssl_config = nil
|
824
|
+
@test_loopback_http_response = []
|
821
825
|
|
822
826
|
@sess_pool = []
|
823
827
|
@sess_pool_mutex = Mutex.new
|
@@ -880,6 +884,7 @@ private
|
|
880
884
|
sess.read_block_size = @read_block_size
|
881
885
|
sess.ssl_config = @ssl_config
|
882
886
|
sess.debug_dev = @debug_dev
|
887
|
+
sess.test_loopback_http_response = @test_loopback_http_response
|
883
888
|
end
|
884
889
|
sess
|
885
890
|
end
|
@@ -959,7 +964,7 @@ class SSLSocketWrap
|
|
959
964
|
raise OpenSSL::SSL::SSLError, "no peer cert"
|
960
965
|
end
|
961
966
|
hostname = host.host
|
962
|
-
if @ssl_socket.respond_to?(:post_connection_check)
|
967
|
+
if @ssl_socket.respond_to?(:post_connection_check) and RUBY_VERSION > "1.8.4"
|
963
968
|
@ssl_socket.post_connection_check(hostname)
|
964
969
|
else
|
965
970
|
@context.post_connection_check(@ssl_socket.peer_cert, hostname)
|
@@ -1038,52 +1043,111 @@ private
|
|
1038
1043
|
end
|
1039
1044
|
|
1040
1045
|
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1046
|
+
module SocketWrap
|
1047
|
+
def initialize(socket, *args)
|
1048
|
+
super(*args)
|
1049
|
+
@socket = socket
|
1050
|
+
end
|
1045
1051
|
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
socket = new(host, port)
|
1050
|
-
socket.debug_dev = debug_dev
|
1051
|
-
socket.log_connect
|
1052
|
-
socket
|
1053
|
-
end
|
1052
|
+
def addr
|
1053
|
+
@socket.addr
|
1054
|
+
end
|
1054
1055
|
|
1055
|
-
|
1056
|
+
def close
|
1057
|
+
@socket.close
|
1056
1058
|
end
|
1057
1059
|
|
1058
|
-
def
|
1059
|
-
|
1060
|
-
|
1060
|
+
def closed?
|
1061
|
+
@socket.closed?
|
1062
|
+
end
|
1063
|
+
|
1064
|
+
def eof?
|
1065
|
+
@socket.eof?
|
1066
|
+
end
|
1067
|
+
|
1068
|
+
def gets(*args)
|
1069
|
+
@socket.gets(*args)
|
1070
|
+
end
|
1071
|
+
|
1072
|
+
def read(*args)
|
1073
|
+
@socket.read(*args)
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
def <<(str)
|
1077
|
+
@socket << str
|
1078
|
+
end
|
1079
|
+
|
1080
|
+
def flush
|
1081
|
+
@socket.flush
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
def sync
|
1085
|
+
@socket.sync
|
1061
1086
|
end
|
1062
1087
|
|
1063
|
-
def
|
1064
|
-
@
|
1088
|
+
def sync=(sync)
|
1089
|
+
@socket.sync = sync
|
1090
|
+
end
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
|
1094
|
+
# HTTPClient::DebugSocket -- debugging support
|
1095
|
+
#
|
1096
|
+
class DebugSocket
|
1097
|
+
include SocketWrap
|
1098
|
+
|
1099
|
+
def initialize(socket, debug_dev)
|
1100
|
+
super(socket)
|
1101
|
+
@debug_dev = debug_dev
|
1065
1102
|
end
|
1066
1103
|
|
1067
1104
|
def close
|
1068
1105
|
super
|
1069
|
-
|
1106
|
+
debug("! CONNECTION CLOSED\n")
|
1070
1107
|
end
|
1071
1108
|
|
1072
1109
|
def gets(*args)
|
1073
1110
|
str = super
|
1074
|
-
|
1111
|
+
debug(str)
|
1075
1112
|
str
|
1076
1113
|
end
|
1077
1114
|
|
1078
1115
|
def read(*args)
|
1079
1116
|
str = super
|
1080
|
-
|
1117
|
+
debug(str)
|
1081
1118
|
str
|
1082
1119
|
end
|
1083
1120
|
|
1084
1121
|
def <<(str)
|
1085
1122
|
super
|
1086
|
-
|
1123
|
+
debug(str)
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
private
|
1127
|
+
|
1128
|
+
def debug(str)
|
1129
|
+
@debug_dev << str if @debug_dev
|
1130
|
+
end
|
1131
|
+
end
|
1132
|
+
|
1133
|
+
|
1134
|
+
# HTTPClient::LoopBackSocket -- dummy socket for dummy response
|
1135
|
+
#
|
1136
|
+
class LoopBackSocket
|
1137
|
+
include SocketWrap
|
1138
|
+
|
1139
|
+
def initialize(host, port, response)
|
1140
|
+
super(StringIO.new(response))
|
1141
|
+
@host = host
|
1142
|
+
@port = port
|
1143
|
+
end
|
1144
|
+
|
1145
|
+
def addr
|
1146
|
+
[nil, @port, @host, @host]
|
1147
|
+
end
|
1148
|
+
|
1149
|
+
def <<(str)
|
1150
|
+
# ignored
|
1087
1151
|
end
|
1088
1152
|
end
|
1089
1153
|
|
@@ -1124,6 +1188,7 @@ class Session # :nodoc:
|
|
1124
1188
|
|
1125
1189
|
attr_accessor :ssl_config
|
1126
1190
|
attr_reader :ssl_peer_cert
|
1191
|
+
attr_accessor :test_loopback_http_response
|
1127
1192
|
|
1128
1193
|
def initialize(dest, user_agent, from)
|
1129
1194
|
@dest = dest
|
@@ -1143,6 +1208,8 @@ class Session # :nodoc:
|
|
1143
1208
|
@ssl_config = nil
|
1144
1209
|
@ssl_peer_cert = nil
|
1145
1210
|
|
1211
|
+
@test_loopback_http_response = nil
|
1212
|
+
|
1146
1213
|
@user_agent = user_agent
|
1147
1214
|
@from = from
|
1148
1215
|
@state = :INIT
|
@@ -1338,11 +1405,17 @@ private
|
|
1338
1405
|
end
|
1339
1406
|
|
1340
1407
|
def create_socket(site)
|
1408
|
+
socket = nil
|
1341
1409
|
begin
|
1342
|
-
if @debug_dev
|
1343
|
-
|
1410
|
+
@debug_dev << "! CONNECT TO #{site.host}:#{site.port}\n" if @debug_dev
|
1411
|
+
if str = @test_loopback_http_response.shift
|
1412
|
+
socket = LoopBackSocket.new(site.host, site.port, str)
|
1344
1413
|
else
|
1345
|
-
TCPSocket.new(site.host, site.port)
|
1414
|
+
socket = TCPSocket.new(site.host, site.port)
|
1415
|
+
end
|
1416
|
+
if @debug_dev
|
1417
|
+
@debug_dev << "! CONNECTION ESTABLISHED\n"
|
1418
|
+
socket = DebugSocket.new(socket, @debug_dev)
|
1346
1419
|
end
|
1347
1420
|
rescue SystemCallError => e
|
1348
1421
|
e.message << " (#{site})"
|
@@ -1351,6 +1424,7 @@ private
|
|
1351
1424
|
e.message << " (#{site})"
|
1352
1425
|
raise
|
1353
1426
|
end
|
1427
|
+
socket
|
1354
1428
|
end
|
1355
1429
|
|
1356
1430
|
# wrap socket with OpenSSL.
|
@@ -1708,6 +1782,10 @@ end
|
|
1708
1782
|
@redirect_uri_callback = redirect_uri_callback
|
1709
1783
|
end
|
1710
1784
|
|
1785
|
+
def test_loopback_http_response
|
1786
|
+
@session_manager.test_loopback_http_response
|
1787
|
+
end
|
1788
|
+
|
1711
1789
|
# SYNOPSIS
|
1712
1790
|
# Client#get_content(uri, query = nil, extheader = {}, &block = nil)
|
1713
1791
|
#
|
data/lib/httpclient/cookie.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: httpclient
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 2.1.
|
7
|
-
date: 2007-
|
6
|
+
version: 2.1.1
|
7
|
+
date: 2007-08-28 00:00:00 +09:00
|
8
8
|
summary: gives something like the functionality of libwww-perl (LWP) in Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: nahi@ruby-lang.org
|
12
|
-
homepage: http://dev.ctor.org/
|
12
|
+
homepage: http://dev.ctor.org/httpclient
|
13
13
|
rubyforge_project:
|
14
14
|
description:
|
15
15
|
autorequire:
|