这是代理和插件开发者的问题。
当涉及到特定站点时,通常的心态是“他们所做的更改破坏了我们的插件;我们更改逻辑以使其再次运行”。
但是,如果对方也担心这个怎么办?如果我们想为代理友好网站的网站开发编写一套指南和最佳实践,您建议应该去做什么?想一想您必须破解的难题。您还记得那些希望网站开发人员以不同方式完成某个功能的时刻吗?怎么办?
因为这与编码有关,所以我认为它不应该出现服务器故障。
编辑: 阅读 Pekka 的评论后,我觉得我应该添加更多背景信息。
有一些 Web 代理脚本,例如 glype 和 PHProxy。由于该脚本应处理许多未知情况,因此无法为许多站点提供服务。由于此类站点的数量太多,因此尝试使代理的内部逻辑足够复杂以处理这种巨大的变化是没有意义的。这是插件派上用场的地方。主脚本或 base 脚本实现了一种机制,可以在每个站点的基础上调用插件代码。
因此,如果代理无法服务,比如 facebook.com,顺便说一下,就是这种情况,对挑战感兴趣的编码人员会进行一些研究和调试,以找出链断裂的位置和原因,以及应该是什么完成以解决问题。编码人员将他的修复作为该特定站点的插件实现,用户可以将该插件放入他们的插件目录中。
但是网站上的某些内容也会发生变化,而这种变化会导致插件再次崩溃。因此,它是一个持续匹配以 catch 站点的最新更改。具有讽刺意味的是,许多站点开发人员既不知道也不关心他们的设计决策可能对内容的代理服务能力 产生的影响。但有些网站有充分的理由关心访问者通过代理访问其内容的能力。不想在这里卷入政治,所以我让您猜猜为什么这对某些网站可能很重要。
这个问题试图利用代理和插件作者的集体知识和经验来制定一套使网站对代理友好的指南。
我最初没有标记 php 问题,因为它主要涉及站点的输出,而不是生成它的方式。但决定这样标记它,因为它会提高问题的可见性,并且标签也可以在目标受众的基础上证明是合理的。我也在制作这个社区 wiki,所以如果你觉得应该删除 php 标签,就这样做吧。
最佳答案
这是一个有趣的问题,我认为没有好的通用解决方案。基本上,您希望您网站的内容可以由您无法控制并且可能不知道这些转换的某些第三方进行转换。
解决此问题的传统方法是发布一个 API,该 API 允许第三方以一种不依赖于屏幕抓取的受控方式查询他们想要的数据。 API 通常只会公开功能的一个子集,通常是因为网站需要用户查看页面才能产生广告收入(或某种其他类型的收入)。
您可以生成非常简单的页面,实际上使用 HTML API,并使用 Javascript 和 CSS 使页面更加用户友好。但是,这可能不适用于大多数站点。但 jQuery 和其他方法所鼓吹的“渐进式增强”方法遵循相同的思路:提供基本的语义内容,并通过 JS 和 CSS 添加功能和魅力。
您可以使用微格式使某些页面内容更易于访问。您应该使用语义 HTML 并在页面元素上放置大量类和 ID,以便插件作者可以找到他们需要的相关内容。
令我印象深刻的是,无论这些代理需要什么,都需要至少学习一次如何解析您的页面。您可以记录该过程(也许发布一两个插件)。
我认为当您发布网站的新版本时,您将无法避免迫使插件作者重新编码。您可以制定一项具有测试期的政策,网站的旧版本和新版本都可用,这将使插件作者有机会更新他们的插件,而不会中断其用户的服务。
关于php - 制作代理友好网站的指南和最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568669/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准rubyping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我似乎经常遇到一些设计问题,但我不知道是什么是真的很合适。一方面我经常听到我应该限制耦合和坚持单一职责,但当我这样做时,我常常发现它很困难到在需要时将信息获取到程序的一部分。为了例如,classSingerdefinitialize(name)@name=nameendattr:nameend那么Song应该是:classSongdefnew(singer)@singer=singerendend或classSongdefnew(singer_name)@singer_name=singer_nameendend后者耦合性小,按道理应该用。但如果我以后发现宋有什么需要了解更多歌手,我的
我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)