辽源 さんのプロフィールlynnブログリスト ツール ヘルプ

ブログ


2006/05/11

log2006-5-9

2006-5-9
21:15

关于HttpWebRequest & Expect 100 Continue的问题

http://support.microsoft.com/default.aspx?scid=kb;en-us;327885

http://blogs.msdn.com/joncole/archive/2005/09/08/462659.aspx

http://haacked.com/archive/2004/05/15/449.aspx

 

解决:

hwRequest.ServicePoint.Expect100Continue = false;

评价:

NB!!

 
22:26
更正了TestUI中对POST传输数据格式的bug,
重新测试sina,发现在发文时,程序没有传输cookie..
明天再测
嗯,今天解决了上面那个Expect 100 Continue的问题,心头的一块小石头落地了啊
2006/05/05

log2006-5-4

2006-5-4
在登陆sina时遇到了一个问题:
在获取服务器响应时得到异常:
The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF

然后上网搜了一下,发现国外好多人都已经遇到这个问题了,比较好的解释问题的是微软技术论坛上的Reed Kimble,原文如下:

Here is the problem...  It is not a bug...

The Internet RFC 822, section 3.2, states that a Header Field in an internet message will be terminated with the character CRLF.  RFC 822 is referenced by nearly all other popular protocol RFCs, including RFC 2616 (the HTTP 1.1 RFC).  Unfortunately, RFC 2616 also has an antiquated recommendation under section 19.3 for "Tolerant Applications" that states "...the line terminator for message-header fields is the sequence CRLF.  However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR.".  This recommendation is unfortunate because it is an obvious security risk to allow parsing of malformed headers and it has convinced some developers that there is no need to fix incomplete code that terminates a header with only LF or only CR.

As for IE rendering a page with one of these malformed headers... IE is a notoriously sloppy browser.  You can build a page that breaks LOTS of RFC rules and IE will still render it.  This is what has lead to the number of security issues that IE has had.

I've run into this error under VS05 using any of the WebResponse objects in a Windows Application.  There is no config file to be edited as mentioned in previous posts.  I'm trying to communicate with a hardware device that is embedded with windows mobile and provides a XML over HTTP host interface for communication.  Whatever webserver is running on this device formulates it's response headers using only a "LF" character.  Therefore none of the WebResponse objects can be created from a WebRequest object pointing to this device's URI.

The manufacturer of the device tells me that I must contact Microsoft and show them that MS has designed the .NET Framework to not be tolerant of malformed headers.  I was hoping someone from the organization could reply to this post and verify that the CF expects fully compliant Internet Message Headers.  Or, if there is a work around at the framework level (that is, one that will work for a Windows Fat Client) to please post it.  Although, I still feel that allowing my app to parse unsafe headers is a security risk and it would be better to see someone from MS confirm that this is the case and is the reason why, out of the box, the framework doesn't allow unsafe headers.


Reed Kimble

引用地址:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=21106&SiteID=1

主体意思是微软没有容忍不符合RFC 822中的httpHeader必须以CRLF结束的规定的服务器响应。Sina的用的是“Apache/1.3.29 (Unix) PHP/4.3.9技术,所以

 

不过,一个解决方案是在application.configweb.config文件里加入

<configuration>

<system.net>

      <settings>

        <httpWebRequest useUnsafeHeaderParsing="true" />

      </settings>

</system.net>

</configuration>

允许系统容忍(tolerant)只以CRLF结尾的hearder信息,问题便可以解决,起码现在对sina的访问经测试已解决,但论坛上仍有人说问题依然存在,我觉得两个可能,一是访问了更垃圾的服务器,二是这孩子没会添加上面的config信息。

嗯,有空时需要测试一下对blogbus的访问是否受到影响~

先写到这,因为这个问题好像国内还比较少见,写篇blog,希望对大家有所帮助。

 

14:51

对于2006-4-28 15:10日志中提到的sina发贴时数据上传的问题,其中的数据采用multipart/form-data 方式上传:
Content-Type: multipart/form-data; boundary= ---------------------------7d6cb303044c
在每条数据间出现一个形如-----------------------------7d6cb303044c的分隔符,经查证,此分隔由浏览器自动生成,不同浏览器有不同的分界,只要保证这个分界符不会出现在数据中。
具体文章可参见:http://www-128.ibm.com/developerworks/cn/java/fileup/index.html
15:10
Sina发贴时的日期和时间数据是打散了传递的,这是应该需要UI层传递UserInfo时就把散装的日志信息传递下来,然后在上传配置文件中只是直接引用sourceUserInfo的对应的量,而不再标记格式转换一类的工作~

log2006-5-3

2006-5-3 0:04
不知道各站点的发文时间的格式会不会不一样
Blogbus是这样的: 2006-05-02 00:03
 
0:25
编码的问题咋办呢
 
14:27
Blogbus机器人发文测试成功,发文时服务器响应有些慢
可能是网络的问题
 
刚装上了VS2005Microsoft Visual Studio 2005 Team Edition for Software Developers)的Team版,感觉还是很帅的
 
嗯,现在应该思考一下部分数据需要URL编码的问题了,加一个属性进行标识吗?需要编码的话加上need URL Encode
应该只有actionURLpostData会用到吧,那么在配置文件的ValueRule中增加属性type="NeedURLEncode"就可以了
 
21:23
登陆和发文后是否成功的验证:
Blogbus中返回登陆页面中将包含SuccessfulFailure可以用来检验
发贴页面如果失败了会说明请重新登陆,
现在的方案是看有没有Successful,有则成功,无则失败
或者是把各种可能返回的页面列出来,把对应状态返回,给UI更大的空间
 
第二种要好一些,可是工作量略大一些
 
22:05
今晚及近期任务,实现sina的配置文件,完成上传功能
完善状态判断,即一个操作是否成功..

log2006-5-2

2006-5-2 21:52
整理一下头绪,现在已完成对CInteractionEngine的实现,包括读配置文件并根据其内容进行操作。
现在未解决的问题有:
1)URL编码:在什么地方处理,配置文件要不要增加辅助项标识
2)结果判断:如何判断是否得到预期页面,比如是否登陆成功或发文成功
3)需要正则表达式的测试工具
 
待完成的任务:
1)分析blogbus发文数据,实现对应配置文件
2)实现配置文件编辑工具,其中需包含正则表达式测试功能
 
现在要做的是blogbus的配置文件
 
加油!~
2006/04/29

log2006-4-29

2006-4-29 15:49

刚完善了一下CConnect,增加了Content-Typemultipart/form-data的处理
准备开始设计CConnectInfoRule,用于指导buildConnectInfo生成CConnectInfo,上述函数定义如下:
CConnectInfo buildConnectInfo(CConnectInfoRule rule, CUserData userData)
一个CConnectInfoRule结点主要描述需要生成哪些需要储存CConnectInfo中的键值对
每一个键值对用一个<ConnectInfoItem>定义
将键名直接作为属性
内部包含若干个值的结点<ConnectInfoValueItem>
每个<ConnectInfoValueItem>结点,内部以属性方式说明该部分的内容来源(source)可分为:”MidInfo”,中间解析信息;”UserInfo”,前台用户信息;”Constant”,常量;
包含值(value):来自XXXInfo时,值为对应Info里的键名,Source”Constant”时,值为常量本身。
整体设计如下:

<ConnectInfoRule>

     <ConnectInfoItem name="method">

         <ConnectInfoValueItem source="Constant" value="POST" />

     </ConnectInfoItem>

     <ConnectInfoItem name="actionURL">

         <ConnectInfoValueItem source="Constant" value="http://www.blogbus.com/members/login.php?Goto=/blog/" />

     </ConnectInfoItem>

     <ConnectInfoItem name="postData">

         <ConnectInfoValueItem source="Constant" value="txtUserName=" />

         <ConnectInfoValueItem source="UserInfo" value="UserName" />

         <ConnectInfoValueItem source="Constant" value="&amp;txtPassword=" />

         <ConnectInfoValueItem source="UserInfo" value="UserPassword" />

         <ConnectInfoValueItem source="Constant" value="&amp;cmdLogin.x=53&amp;cmdLogin.y=23" />

     </ConnectInfoItem>

</ConnectInfoRule>

此示例为blogbus登陆时的CConnectInfoRule
2006/04/28

log2006-4-28

2006-4-28 15:10

昨天和冯冯根据婧婧给的blog列表定下了三家第一版实现的目标网站

包括blogbussinadonews

刚分析了一下sina,发现在发表文章时,它的postdata很奇异(如下):

-----------------------------7d6cb303044c

Content-Disposition: form-data; name="blog_title"

second

-----------------------------7d6cb303044c

Content-Disposition: form-data; name="sort_txt"

然后上网搜了一下,发现是一个还算新的web数据传输方式,具体遵照RFC1867

下面是两篇相关的国内的文章

http://blog.gxsti.net/cs/blogs/xyc/archive/2005/12/06/503.aspx

http://www.sheweb.cn/bbs/dispbbs.asp?boardID=4&ID=295

15:53

上面的那个传输属于“HTML中基于表单的文件上传”(RFC1867  Form-based File Upload in HTML)
具体程序进行实现的时候主要有两点:
1) http表头中Content-Type不再是application/x-www-form-urlencoded
设置为multipart/form-data,后面增加boundary=然后给出数据之间的分界符号
例如:
 Content-Type: multipart/form-data; boundary= ---------------------------7d6cb303044c
2)PostData的数据格式
--boundary

Content-Disposition: form-data; name="blog_title"

/r/n

数据内容(不用URL编码)

--boundary

下一个数据

基本上是这样,实现的时候主要重新考虑一下postdata的生成就行了
还没经过测试
备注:
Sina的服务器信息:
Server: Apache/1.3.29 (Unix) PHP/4.3.9
X-Powered-By: PHP/4.3.9
2006/04/19

log2006-4-18

2006-4-18 20:06

决定先不设计前置条件的检查了

20:38

CInteractionEngine的结构终于清晰一些了

 

21:47

CInteractionEngine的主体结构完成,所有元交互功能统一为

RunAtionstring actionIDCUserData userData

为以后可能的Command模式作准备。

也可能在命令批处理时改成delegate,然后形成命令序列。

 

还在犹豫图片验证码的问题,很垃圾,因为需要和前台交互是独立出数据标识接口(IsSth)还是统一到一起去(具体怎么统一,暂无方案)

 

需要继续完成的设计工作有,CConnectInfoRuleCAcquireMidInfoRule的类的结构设计

以及对应函数

CConnectInfo buildConnectInfo(CConnectInfoRule rule, CUserData userData)

bool acquireMidInfo(CAcquireMidInfoRule rule)

的实现

然后就是交互引擎的数据核心CInteractionEngineInfo的设计了~

加油!~

log2006-4-17

2006-4-17 13:34

好久没有写日志,两个原因,一是这段时间没有投入太多精力,二是一直没有连续的时间使用电脑,虽然在本部的寝室有自己的机器,但已经成为大家公用的游戏机和DVD,只能偷时间用来做东西。

上周昏昏碌碌的过去了,昨天刚回来,新的一周,要加油了

 

嗯,上周没有写日志,很多工作是在纸面上完成的,具体的数据导入和交互模块的设计有所改动,与2006-4-6的不同。具体的等实现和成熟了在写上来吧

今天的任务是完成对blogbussinadonews的交互分析。

 

Blogbus的交互很简单,参数也比较直观

并且支持数据导入导出功能,应该可以使用更简单的方法实现,

SinaIDnkningliaoyuan

地址:http://blog.sina.com.cn/u/1228159404

BlogbusdonewsIDningliaoyuan

 

Sina需要验证码,没有测试,但预计应该不会出现技术问题

Blogbus居然可以随便发评论,怪不得有机器人去捣乱

Donews登陆不上去,晚上再试试吧

log2006-4-13

2006-4-13 14:19

上周的那个设计好像实现起来存在很多问题

现在棘手的是有的网站登和发贴不用验证图片,有的网站则需要验证图片,因为有无验证图片将影响到UI的交互,所以在设计一个统一接口的抽象类时会变得很复杂,且不具通用性。

现在在想,一种方案是能否将验证码的识别和填写采用一个回调函数的方式,在调用login的时候,传一个UI的函数,然后Login()函数调用这个UI的函数,以弹出对话框的方式请求用户输入验证码内容,然后在往下进行。

另一种方案是默认所有的网站都需要验证图片,当遇到不需要验证图片的网站时,验证图片变灰。

嗯,后一种方式比较适合登陆时和,前一种方式比较适合进行批量上传时。

 

2006/04/06

log2006-4-6

2006-4-6 14:40

准备重构一下代码,从哪里开始好呢,嗯,先把临时中间文件的存放文件夹改为可定制,并且由配置文件保存上次设置的结果。

15:39

嗯,应该尝试把底层功能部分挪到Interaction里,特殊的数据留在UI这边,下一步准备从单独的配置文件读入这些数据。

15:49

底层核心的功能模块应该有两个:Connect类和ConnectDriver类,前者用来实现单次的最基本交互,ConnectDriver主要用来驱动Connect,并完成登陆,发文等预制功能,数据来源由使用者提供。一个ConnectDriver对象的生命期应该贯穿始终,和用户的一个登陆帐号同步并为UI服务,直到用户退出程序或重新登陆。

初始化ConnectDriver的参数包括:TempFileName类(包含目录和一些指定的临时文件名,也可定制为默认),ConnectInfo类(查询信息:包括登陆的步骤;发文的步骤;每一步需要的信息,actionURLpostdata及信息来源如从上一网页提取;一个CookieContainer

ConnectDriver提供一个SingleFactory,由blogname进行标识,因为有可能由好几个Driver类同时连接不同的blog

ConnectDriver有个状态标记,分为:未登录,已登录等。用来判断是否可发文。

ConnectDriver的主要功能函数有:Login()NewPost()

考虑约束一下ConnectInfo的内容:

1)  不包含提取信息的功能,单提供是否需要提取信息的信息;

2)  包含登陆的步骤信息,具体指导Login()的实现;

3)  包含发文的步骤信息,具体知道NewPost()的实现;

4)  如果用户保存cookie,则为ConnectDriver提供已有cookie,使其直接进行登陆;

5)  不包含登陆用的用户名密码等信息;

6)  不包含发贴时用的标题文本等信息;

先设计到这吧,可能近两天没时间进行实现了,要看X射线的论文了(*_*),回去可以在参考一下Blogger APIAPI进行ConnectDriver的设计,以便以后在Driver层进行http方式和API方式的兼容。

要去赶校车了~加油!~

2006/04/05

log2006-4-5

2006-4-5 14:48

昨天很意外收到了爱搞搞的回信,没想到可以回的这么快,不过转念一想,咱都是搞挨踢的,都有随时收email的习惯,回信当然快咯。

后来根据爱搞搞的指示和tiger联系上了,并通过msn聊了一会。嗯,具体的就不写了。

今天应该实现对csdn的发文了,进度有些慢,没办法,因为每天也只有下午的这一点时间可以用来做这个,嗯,明天例会还要给大家demo呢,所以今天一定要完工。

现在的问题应该只是信息提取的部分,刚翻了下LCC项目中的信息提取,曾经的代码看着好亲切,不过问题是那个用来做提取的类写的过于复杂,而这个项目好像用不着那么多的功能,只是简单的提几个字串参数就行,在想是copy些代码过来,还是把类直接搬过来进行复用呢。

 

16:24

终于做完了信息提取的部分,用的是原来的类的几个静态方法。对于验证码图片,做了下新的处理。

 

17:18

登陆搞定,晚上实现发文~

明天抽时间看能不能重构一下

19:53

发文测试成功!~

对应blog浏览地址为: http://blog.csdn.net/ningliaoyuan

明天上午把代码重构一下,晚上就可以交活了

嗯,刚才测试到第五回才成功,还是写东西太马虎了,有空真该Test-Driven一下了

log2006-4-4

2006-4-4

13:53

昨天主要看毕业设计方面的东西了,抽空简单做了下nkbbs.org的发文,成功的做出了半自动的灌水机,就是直接手动操作传过去的postdatacookie,便可以用我的小程序在bbs上发文章了。

原来bbs只是用cookie来鉴别用户是否登陆以及拥有相关权限的,假如用sniffer在局域网里捕获到其他人与bbs上的数据包的话,用里面的cookie就可以冒名顶替的发文了,哈哈哈哈,恩,跑题了,刚主要想说的是nkbbs还是有很多安全隐患的,比如登陆的帐号密码都是明文传送,可以用sniffer很容易的获取别人登陆时的请求数据包,然后便可以用别人的帐号了….恩,好像又跑题了

说说今天的任务,因为blogger很不稳定,blogcn也存在n多访问上的问题(具体暂不详述),所以选择csdnblog做为第一个测试对象。刚试了下,只要拥有cookie,以及正确的__VIEWSTATE,便可以直接发文章了,而cookie在登陆时可以获得,__VIEWSTATE则在请求的发贴的网页源码中可以找到,然后就可以带着这两个通行证随心所欲的post了。

简单构思一下现在要做的东西,起名字叫UIForCSDN,底层复用connect类,并应用connect类的功能增加一个应用层的类,就是利用connect的基本交互实现loginpost文章的两种交互。同时,需要增加一个网页数据提取的小模块,可以叫做parseHtml,可以采用正则表达式直接提取指定的内容。

恩,在发文时,还要做一个简单的编辑器,以及将发文内容转化为对应的postdata

忘了一点,就是一个小的技术问题,就是登陆时需要将数字验证码图片下载下来以后显示到UI上,由使用者识别并添出对应的验证码进行登陆。

记录一下:www.csdn.netblog的帐号:ningliaoyuan,密码:不告诉你^_^

发布地址:http://blog.csdn.net/ningliaoyuan/

嗯,开始干活~

14:18

刚非常奇怪,为什么aigaogao的登陆不用验证码呢

刚看了下爱搞搞的blog,发现她居然说aigaogao以后可能不搞了..随即给她发了封mail,不知道能不能收到回应。

15:11

刚花了些时间分析aigaogao,这个软件做得果然还不错,把用户文件放到了C:\Documents and Settings\*******\Application Data里,这一点是需要学习的啊~

不过还是没有试验成功,好像csdn的发文还是有问题。

15:17

原来jpg图片可以直接GET到,然后存成jpg文件就行了..

16:10

Csdn登录验证码图片获取:

获得验证码图片的html源码如下:

<script type="text/javascript">document.write("<img src='ShowExPwd.aspx?DateTime=2006-4-4 16:08:18&strimg=",Math.random(),"' >");</script>

对应产生的URL为:

http://passport.csdn.net/ShowExPwd.aspx?DateTime=2006-4-4%2015: 56:14&strimg=0.05153724263469728(0.7218031877931791)红字部分为Math.random()产生的随机数,据观察,无位数等规律。值得注意的是最后一个参数的namestrimg,而不是string

16:22

Csdn登陆过程:

1)      登陆前,需要获取登陆界面http://passport.csdn.net/UserLogin.aspx

2)      对方会给一个cookieClientKey=f16cbb97-8a9a-41db-80a4-35a1dea61a4a

3)      有一个GET,暂时不了解作用,获得的是一堆函数,地址如下:
/WebResource.axd?d=gZ-kQQVrTsWAkNt2nAxUAK6bHt6dO3jnm0u61ZzuFX41&t=632772442595625000

4)      获得验证码的图片,方法如上

5)      在获取UserLogin.aspx中某个图片时好像得到了一个ASP.NET_SessionId,具体相关内容如下HTTP/1.1 200 OK
Set-Cookie: ASP.NET_SessionId=uyivwxzrvflffoa2rzujwj55; path=/; HttpOnly

Content-Type: image/Jpeg
Content-Length: 4079

6)      将用户名密码以及验证码填好,其中去要抓出__VIEWSTATE__EVENTVALIDATIONClientKey,具体数据如下:
POST /UserLogin.aspx HTTP/1.1
Host: passport.csdn.net
Cookie: ClientKey=d88eaa4d-3785-4a4e-b1fc-f8ff73ff1d0e;
ASP.NET_SessionId=uyivwxzrvflffoa2rzujwj55
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKMTI1MTcwMzM1MmQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFGkNTRE5Vc2VyTG9naW46Y2JfU2F2ZVN0YXRlBRlDU0ROVXNlckxvZ2luOkltYWdlX0xvZ2lu4B72stykUi%2BYH20USnTGr4VvwFA%3D&CSDNUserLogin%3Atb_UserName=ningliaoyuan&CSDNUserLogin%3Atb_Password=ningliaoyuan&ClientKey=d88eaa4d-3785-4a4e-b1fc-f8ff73ff1d0e&CSDNUserLogin%3Atb_ExPwd=622R4&from=passport.aspx&__EVENTVALIDATION=%2FwEWBgK86633BgK%2Fk5zpDwKTgdidDgKNvfCSDQKlg4nTCQLi38rZDRO%2BL%2BlL8Pn3ZImy9W9lst7o0RAU&CSDNUserLogin%3AImage_Login.x=61&CSDNUserLogin%3AImage_Login.y=4

7)      得到ABCDEF等的cookie,带着这些cookie,就可以发文章,呵呵~

18:18

在第n次手动测试失败后,终于在n+1次的时候成功了~

按照上面的过程就可以成功的登陆了

下一步就是总结手动部分的过程,并用代码实现

Byw,需要把原来lcc项目的工具整合过来一些了

先去打蓝球了,晚上回来继续!go

 

后记:

当天晚上又打篮球又打乒乓球的,就忘了干活了
2006/04/02

log2006-3-23(具体好像不是这天)

14:21

貌似提交文章只有三个参数

有效内容为参数d

前半部是html格式的文本内容后面为

",,false,,false,cns!94756826CC60EBF8!105,[],我的网络日志照片"

怀疑是调用一个函数的参数格式

14:34

 

基本上传输都是三个参数,

1)cn:为调用的类名或模块名,例如:Microsoft.Spaces.ObjectModel.FireAnt.BlogService

2)mn:为调用的方法名,例如:post_blog_entry

3)d:为调用该方法的参数,例如:<DIV>this test is for the sake

of analyzing the paramter named 'd'</DIV><DIV>go</DIV>,test

for analyzing paramters,,false,计算机与 Internet,true,,[],

的网络日志照片

在调用一些方法时d参数的数据为会被串行化,显示出来是乱码。

猜测:cn=>class name,mn=>method name,

 

发帖的post_blog_entry方法的参数初步分析:

参数一为文本内容

参数二为标题内容

参数三为,      例如:

参数四为,      例如:false

参数五为分类

参数六为,      例如:true

参数七为,      例如:

参数八为,      例如:[]

参数九为       例如:我的网络日志照片

14:47

发现同类产品WB Editor 2http://www.wbeditor.com,下面是其介绍:

WB Editor 2 is a .NET blog client tool that supports posting to MSN spaces, uploading images to Flickr and generating technorati tags ...

声称

Connect to blog servers using blogger API, metaWeblog API and Atom API

说明都是使用了标准的那些API

Remote blog post download”,说不上算备份,也算是把历史存档了。

当前已经发展到2.3.2

网友virushuo说:

wbedit是个中国人作的,原来他也在donews上有blog,后来发现中国不成,就专门作英文版,变成收费软件了。我觉得,仅论备份和上传,实在没什么讨论价值,这太基本了。我们来说更多的功能。我说见到aigaogao,觉得震惊,主要就是对于评论的处理。当然和别人比这个也是有点无聊的,这个大概也只能url hacker这种方法完成。

我觉得,就算donews/csdn开放了metaweblog api,恐怕仍然不如aigaogao好用。

 

14:57

 

关于msn spacesAPI说明:http://www.xmlrpc.com/metaWeblogApi

应该可以直接通过API完成功能,如果像某些网友说的那样有局限性的话再考虑用url hacker的方法吧

 

15:37

MetaWeblog APIhttp://www.xmlrpc.com/metaWeblogApi)中有用的内容及偶的翻译:

1

The MetaWeblog API is designed to enhance the Blogger API, which was limited in that it could only get and set the text of weblog posts.

译文:MetaWeblog API是对Blogger API仅传输文本内容的单一功能的扩充。

2

Basic entry-points

metaWeblog.newPost (blogid, username, password, struct, publish) returns string
metaWeblog.editPost (postid, username, password, struct, publish) returns true
metaWeblog.getPost (postid, username, password) returns struct
The blogid, username, password and publish params are as in the Blogger API. newPost returns a string representation of the post id, again as defined by the Blogger API. The struct is where the juice is.

译文:参数blogid, username, password and publish params采用Blogger API的标准,方法newPost返回一个string类型,含义是一个post id,同样在Blogger API标准有定义。

3

In newPost and editPost, content is not a string, as it is in the Blogger API, it's a struct. The defined members of struct are the elements of <item> in RSS 2.0, providing a rich variety of item-level metadata, with well-understood applications.

译文:在方法newPosteditPost的参数中,post的内容参数不再是Blogger API约定的string类型,而是采用struct。其中的成员均为RSS2.0中的<item>的元素。这样便提供了丰富的item级的元数据,继而得到更好的应用。

 

16:17

关于MSN SpacesAPI定义和调用方法等,相当有用

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msnspaces/MetaWeblogAPI_CSharp_Code_Sample.asp

看来要学xml-rpc的调用了:http://xml-rpc.net/

 

21:45

经过n次失败的试验:在运行msn提供的sample code后,始终得到access denied的结果,

后来仔细读了下msn的介绍,发现其给出的API响应端无法访问https://storage.msn.com/storageservice/MetaWeblog.rpc

得到页面说:

The page cannot be displayed

You have attempted to execute a CGI, ISAPI, or other executable program from a directory that does not allow programs to be executed.


Please try the following:

  • Contact the Web site administrator if you believe this directory should allow execute access.

HTTP Error 403.1 - Forbidden: Execute access is denied.
Internet Information Services (IIS)

所以果断决定暂时放弃这个beta版的API,而采用html的方法试一下。

22:13

 

22:31

在测试登陆msn spaces的时候遇到困难,无法进行passportsign in

在获取http://login.passport.com/jsDisabled.srf?lc=1033页时得到html指出:

JavaScript required to sign in.

The Microsoft Passport Network requires JavaScript to sign in.

This web browser either does not support JavaScript, or scripts are being blocked

看来passport的登陆是靠java脚本实现,现在的方法不能直接进行

在直接对登陆页面(http://loginnet.passport.com/ppsecure/post.srf)进行Post提交时,得到:

服务器的(403)Forbidden的响应…5555

今天先到这吧,看来微软对机器人有一定的防范啊..

log2006-4-2

2006-4-2

14:29

开始工作吧,今天的计划是用代码实现一下msn spaces的登录。如果测试成功后,明天再重新设计一下这个代码的机构,然后重构。如果不成功的话,就拿昨天www.blogger.com开刀好了~

Go!

如果说在LCC项目中交互部分地核心是Postdata的话,今天的任务核心应该是处理好cookie了,因为根据前段时间的学习可以得出结论:各网站的安全认证机制基本上都是基于cookie的,恩,先写写code再说。

14:38

我们首先应该需要一个实现单次交互的函数,根据http协议,一次交互的请求的信息包括:

actionURLmethod(GET or POST)refererURLGetdataPostdataUser-AgentHostContentTypeContentLength(Postdata.length)

当然最重要的还是一个CookieContainer

恩,上面那么多的信息,绝大多数都是string型,并且随时有扩充的可能,所以采用一个

然后再得到响应后可以将得到的数据流保存成文件,当收到302跳转时一般要自动跟踪跳转,然后将最终结果保存下来,以备下一步的处理。此时需要设置AllowAutoRedirecttrue

16:15

通过第一步提交,得到一个中间页面,具体功能应该是判断是否有执行Java脚本的功能。

然后自动submit到下一个页面,并给了一个mspppostint参数(postdata)。

现在准备将主函数分出针对性第一步,第二步的连接。然后通过一个GUI界面进行中间参数的设置。

16:25

在进行第二步的referer的设置时发现,浏览器中是这个东东,后面的getdata不知道会不会影响结果:

http://login.passport.com/login.srf?lc=2052&id=45930&ru=http%3a%2f%2fspaces.msn.com%2fSignUp.aspx%3f&msppjph=1&tw=14300&kv=7&ct=1143881852&ems=1&kpp=2&ver=2.1.6000.1&tpf=8eae2541f305f4ee4d350941933947dc

刚把AllowAutoRedirect关上后(设为false),发现在弟一二步中间还有两次跳转,

跳转链接可以在titleObject moved的页面中找到,于是决定手动跟踪30*跳转。这样可控性强一些。

19:47

经过一大番编码以及测试,最终问题锁定在怎么与uilogin.srf进行交互,正在寻找有用的与srf文件交互的资料。现在的问题是访问srf时无法得到其返回的结果。

21:51

明天准备做blogger的吧,看来passport还是个技术小瓶颈啊~

2006/04/01

log2006-4-1

2006-4-1 15:59

看了下blogcn的登录,应该很简单,提交上去以后,会自动setcookie给你,然后用这个cookie就可以做想做的事了,只是后面的发文似乎有些麻烦,而且还要添数字验证码。最郁闷的事是提交文章后,访问我的blog居然看不到正常的结果。

16:10

刚在www.blogger.com注册了一个帐号:IDningliaoyuanpswfortest

Blog页面地址:http://ningliaoyuan.blogspot.com/

登陆好像很简单,不过在正式登陆之前,网站会给你分配一个JSESSIONID和其他的小零碎。

发文也很简单,不用添数字验证码。可是也看不到刚注册发布的blog,郁闷。

记录一下,www.blogcn.com的帐号同样是:IDningliaoyuanpswfortest

Blog页面地址:http://www.blogcn.com/u/56/24/ningliaoyuan/index.html

http://ningliaoyuan.blogcn.com(貌似不能访问)

16:23

在这个地方(http://help.blogger.com/bin/answer.py?answer=1030&topic=43

发现了支持blogger的第三方软件列表

16:34

用中间删除cookies的方法,在登陆msn spaces时获得的数据为

Cookie只剩下:MSPBack=1143880304; MSPRequ=lt=1143880306&co=1&id=45930

PostData为:PPSX=Passpor&PwdPad=IfYouAreReadingThisYouHaveTooMuch&login=ningliaoyuan@sohu.com&passwd=wo%21ai2ly&LoginOptions=2&PPFT=B4jUB2ELdRY9UcF4rxe%21VU7qnqTn72*M3cmmT6bUjje7s80%21PEpMF1rsqNv3I57CNnGRyLaFr09CylMonec0b5ENdZCkBX8gXtIk1lw2rz%21sqaBUtw%24%24

详见workfolder\test_connect\Login\postdata\login_clearCookies.txt

参数中的PPFTvaluehtml源码中可以获取得到~^_^

17:00

Spaces.msn..com的登陆过程简析:

1)GET /SignUp.aspx

2)302跳转:并Set-Cookie:

MC1=V=3&GUID=e900e8cec50d4a70b2f96610a55147be; domain=.msn.com; expires=Mon, 04-Oct-2021 19:00:00 GMT; path=/

3)自动跳转:携带Cookie: MC1=V=3&GUID=e900e8cec50d4a70b2f96610a55147be

4)再次302跳转,获取:login.passport.com/login.srf,后接getdata

5)200确认,并setcookie

Set-Cookie: MSPRequ=lt=1143881853&co=1&id=45930(此处红色数据比较有用)

Set-Cookie: MSPBack=1143881852; domain=.passport.com;path=/;version=1

6)POST login.passport.com/uilogin.srf?lc=2052&id=45930Postdata应该在相应html网页中获得

7)此时到达登陆页面,登陆时需要上述红字数据~

后面的过程明天再分析吧~